1.数组的概念
/* 数组的格式 数组: 同一种数据类型的若干个值的容器 元素:数组中的值称为元素 索引:元素的标号,从0开始 长度:数组中元素的个数 */ public class ArrayDemo1{ public static void main(String[] args){ int a = 1; int b = 2; int c = 3; //数据类型 变量名 = 初始值; //定义数组,第一种格式:动态初始化,定义数组时,不指定数组里具体的值. int[] arr = new int[10]; //第二种静态初始化:定义数组时,元素已经确定 int[] arr2 = new int[]{1,2,3}; //简化写法 int[] arr3 = {10,20,30}; } }
2.数组元素的使用
/* 数组元素的使用: 数组名[索引值] 数组元素的默认值: 能为0的为0,能为0.0的为0.0,能为false的为false,能为null的为null */ public class ArrayDemo2{ public static void main(String[] args){ //创建一个长度为5的int型数组 // double[] arr = new double[5]; // boolean[] arr = new boolean[5]; // String[] arr = new String[5]; /* System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[3]); System.out.println(arr[4]); */ // int[] arr = new int[5]; // byte[] arr = new byte[5]; // short[] arr = new short[5]; // char[] arr = new char[5]; // int[] arr = new int[5]; //用循环改进 for(int i = 0;i<5;i++){ System.out.println(arr[i]); } } }
3.获取数组中的最值
/* 获取数组的最值(最大值,最小值) int[] arr = {1,4,3,2}; */ public class ArrayDemo3{ public static void main(String[] args){ /* int[] arr = getArray(20); printArray(arr); int max = getMax(arr); System.out.println("最大值是: " + max); int min = getMin(arr); System.out.println("最小值是: " + min); */ printArray(getUniqueArray(20)); } //获取一个int型数组的最大值 public static int getMax(int[] arr){ int max = arr[0]; for(int i = 1;i<arr.length;i++){ if(arr[i] > max){ max = arr[i]; } } return max; } //获取一个int型数组的最小值 public static int getMin(int[] arr){ int min = arr[0]; for(int i = 1;i<arr.length;i++){ if(arr[i] < min){ min = arr[i]; } } return min; } //获取一个范围是1-50之间的int数组 public static int[] getArray(int n){ int[] arr = new int[n]; //循环产生随机数,放到数组中 for(int i = 0;i<arr.length;i++){ int r = (int)(Math.random() * 50 + 1); arr[i] = r; } return arr; } //打印数组元素 public static void printArray(int[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } //生成一个不包含重复元素的int型数组 public static int[] getUniqueArray(int n){ int[] arr = new int[n];// for(int i = 0;i<arr.length;i++){ int r = (int)(Math.random() * 50 + 1); while(isExist(arr,r)){ r = (int)(Math.random() * 50 + 1); } arr[i] = r; } return arr; } //判断一个数组中是否包含某个数值 public static boolean isExist(int[] arr,int value){ for(int i = 0;i<arr.length;i++){ if(value == arr[i]){ return true; } } return false; } }
4.从键盘录入数据,并求最值
/* 从键盘录入数组的元素,并求最值 */ import java.util.Scanner; public class ArrayDemo4{ public static void main(String[] args){ int[] arr = genArray(); System.out.println("最大值是: " + getMax(arr)); System.out.println("最小值是: " + getMin(arr)); } //从键盘录入数据,并返回一个int型数组 public static int[] genArray(){ Scanner s = new Scanner(System.in); System.out.print("输入数组的长度 : "); int len = s.nextInt(); int[] arr = new int[len]; for(int i = 0;i<arr.length;i++){ System.out.print("请输入第"+ (i+1) + "个数: "); arr[i] = s.nextInt(); } return arr; } //获取最小值 public static int getMin(int[] arr){ int min = arr[0]; for(int i = 1;i<arr.length;i++){ if(arr[i] < min){ min = arr[i]; } } return min; } //获取最大值 public static int getMax(int[] arr){ int max = arr[0]; for(int i = 1;i<arr.length;i++){ if(arr[i] > max){ max = arr[i]; } } return max; } }
5.随机生成一个5个元素在(1-10)的int型数组,求一个随机数在这个数组中第一次出现的索引值
/* 随机生成一个5个元素(1-10)的int型数组,求一个随机数在这个数组中第一次出现的索引值 */ public class ArrayDemo6{ public static void main(String[] args){ int[] arr = genArray(); printArray(arr); int r = (int)(Math.random() * 10 + 1); int index = getIndex(arr,r); if(index < 0){ System.out.println(r + "没找到"); }else{ System.out.println(r + "第一次出现的索引是: " + index); } } //获取一个数在指定数组中出现的第一次索引值 public static int getIndex(int[] arr,int value){ for(int i = 0;i<arr.length;i++){ if(arr[i] == value){ return i; } } return -1; } //生成一个int型数组 public static int[] genArray(){ int[] arr = new int[5]; for(int i = 0;i<arr.length;i++){ int r = (int)(Math.random() * 10 + 1); arr[i] = r; } return arr; } //打印数组 public static void printArray(int[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } }
6.用数组模拟裁判打分
5个裁判,去掉最高分和最低分,然后求剩余元素的平均值.
/* 用数组模拟打分: 5个裁判,去掉最高分,最低分,然后求剩余元素的平均值作为最终得分 */ public class ArrayDemo7{ public static void main(String[] args){ int n = 5; int[] arr = genArray(n); print(arr); double avg = getAvg(arr); System.out.println("平均分是: " + avg); } //求平均值 public static double getAvg(int[] arr){ int max = getMax(arr); int min = getMin(arr); double sum = 0.0; for(int i = 0;i<arr.length;i++){ sum += arr[i]; } sum = sum - max - min; return sum / (arr.length - 2); } //求最大值 public static int getMax(int[] arr){ int max = arr[0]; for(int i = 1;i<arr.length;i++){ if(arr[i] > max){ max = arr[i]; } } return max; } //求最小值 public static int getMin(int[] arr){ int min = arr[0]; for(int i = 1;i<arr.length;i++){ if(arr[i] < min){ min = arr[i]; } } return min; } // public static int[] genArray(int n){ int[] arr = new int[n]; for(int i = 0;i<arr.length;i++){ arr[i] = (int)(Math.random() * 101); } return arr; } public static void print(int[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } }
7.定义一个int型数组,定义方法,把数组的元素变成原来的2倍
/* 定义一个int型数组,定义方法,把数组的元素变成原来的2倍 */ public class ArrayTest{ public static void main(String[] args){ int[] arr = {1,2,3,4,5}; printArray(arr); doubleArray(arr); printArray(arr); } //将元素变成原来的2倍 public static void doubleArray(int[] arr){ for(int i = 0;i<arr.length;i++){ arr[i] = arr[i] * 2; } } //打印数组元素 public static void printArray(int[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } }
8.数组的复制:返回值类型是数组
判断堆空间中的两个对象是否是同一数组,可以使用 ==判断他们的地址值
/* 数组的复制:返回值类型是数组 判断堆空间中的两个对象(数组)是否是同一个数组,可以使用 == 判断他们的地址值 */ public class CopyArrayDemo{ public static void main(String[] args){ int[] arr1 = genArray(); print(arr1); int[] arr2 = copyArray(arr1); // int[] arr2 = arr1; print(arr2); // System.out.println(arr1 == arr2);// System.out.println(arr1);//[I@6d06d69c 类型@十六进制值 } public static int[] genArray(){ int[] arr = new int[5]; for(int i = 0;i<arr.length;i++){ int r = (int)(Math.random() * 50 + 1); arr[i] = r; } return arr; } public static void print(int[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } //int[] //int[] public static int[] copyArray(int[] arr){ //创建一个和参数一样大小的数组 int[] copy = new int[arr.length]; //遍历参数的数组,把元素拷贝到新数组中 for(int i = 0;i<arr.length;i++){ copy[i] = arr[i]; } return copy; } }
9.自定义方法之间的互相调用
/* 演示自定义方法之间的互相调用 */ public class Demo{ public static void main(String[] args){ introduce("Zhangsan"); } // public static void sayHi(){ System.out.println("Hello"); } // public static void introduce(String name){//name = "Zhangsan"; sayHi();//调用自定义方法 System.out.println("My name is : " + name); } }
10.求两个double值得四则运算结果
/* 求两个double值的四则运算结果 */ public class Demo2{ public static void main(String[] args){ test(10.0,2.0); } //void //double d1,double d2 public static void test(double d1,double d2){ System.out.println("两个数的和是: " + (d1 + d2)); System.out.println("两个数的差是: " + (d1 - d2)); System.out.println("两个数的积是: " + (d1 * d2)); System.out.println("两个数的商是: " + (d1 / d2)); } }
11.数组的常见异常
/* 数组操作的常见异常 1.数组索引越界 2.空指针异常 */ public class ExceptionDemo{ public static void main(String[] args){ int[] arr = new int[]{1,2,3,4,5,6}; int[] arr2 = new int[]{7,8,9}; int[] arr3 = new int[]{70,80,90}; printArray(arr); printArray(arr2); printArray(arr3); boolean[] arr4 = {true,false,true,true}; printArray(arr4); // System.out.println(arr.length); // for(int i = 0;i<3;i++){//根据数组的length属性动态的获取数组的长度 // for(int i = 0;i<arr.length;i++){ // System.out.println(arr[i]); // } // System.out.println(arr[0]); // System.out.println(arr[1]); // System.out.println(arr[2]); // System.out.println(arr[30]);//java.lang.ArrayIndexOutOfBoundsException:数组索引越界异常 // for(int i = 0;i<arr.length;i++){ // System.out.println(arr[i]); // } // arr = null; // System.out.println(arr[2]);//java.lang.NullPointerException:空指针异常 // for(int i = 0;i<arr.length;i++){ // System.out.println(arr[i]); // } } //void //int[] arr public static void printArray(int[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } public static void printArray(boolean[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } }
12.合并两个数组
/* 合并两个数组 data1 = [1,2,3] data2 = [4,5,6] */ public class MergeDemo{ public static void main(String[] args){ int[] arr1 = genArray(); int[] arr2 = genArray(); System.out.println("生成的第一个小数组是:"); print(arr1); System.out.println("生成的第二个小数组是:"); print(arr2); int[] res = merge(arr1,arr2); System.out.println("合并之后的数组是:"); print(res); } //随机生成一个长度随机(1-5)的int数组(1-50) public static int[] genArray(){ int len = (int)(Math.random() * 5 + 1); int[] arr = new int[len]; for(int i = 0;i<arr.length;i++){ arr[i] = (int)(Math.random() * 50 + 1); } return arr; } //合并两个数组 public static int[] merge(int[] a,int[] b){ int[] bigArray = new int[a.length + b.length]; int index = 0; for(int i = 0;i<a.length;i++){ bigArray[index] = a[i]; index++; } for(int i = 0;i<b.length;i++){ bigArray[index] = b[i]; index++; } return bigArray; /* for(int i = 0;i<a.length;i++){ bigArray[i] = a[i]; } // for(int i = 0;i<b.length;i++){ bigArray[i + a.length] = b[i]; } return bigArray; */ } public static void print(int[] arr){ for(int i = 0;i<arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(); } }
13.