一、二维数组的声明
(三种形式)[]中括号可以放在不同的地方
int[][] intArray;//数据类型[][]数组名 float floatArray[][];//数据类型 数组名[][] double[] doubleArray[];//数组类型[]数组名[]
二、 二维数组创建的两种方法
1、直接指定行数和列数
char ch = new char[3][4]; //创建一个3行4列的二维char类型数组,初始化为null。
2、只指定行数,不指定列数
float[][] floatArray = new float[3][]; //这时的二维数组每行相当于一个一位数组,需要再次手动创建每列。 //若没有创建列就进行访问会抛出空指针异常 floatArray[0] =new float[3]; //第一行有3列 floatArray[1] =new float[4]; //第二行有4列 floatArray[2] =new float[5]; //第三行有5列
三、代码举例
package com.fiona.javaBasis.day7array_2; public class _02arrayDemo { public static void main(String[] args) { //二维数组的声明 //三种形式 //声明int类型的二维数组 int[][] intArray; //声明float类型的二维数组 float floatArray[][]; //声明double类型的二维数组 double[] doubleArry[]; //创建一个三行三列的int类型的数组 intArray= new int[3][3]; System.out.println("intArray数组的第三行第二列的元素为:"+intArray[2][1]); //为第2行第3个元素赋值为9 intArray[1][2]=9; System.out.println("intArray数组第2行第3列的元素为:"+intArray[1][2]); //声明数组的同时进行创建 char[][] ch=new char[3][5]; //创建float类型的数组时,只指定行数 //只指定行数不指定列数是正确的,什么都不写或者只指定列数不指定行数是错误的。 floatArray=new float[3][]; //二维数组的每行相当于一个一维数组,需要创建 floatArray[0]=new float[3];//第一行有三列 floatArray[1]=new float[4];//第二行有四列 floatArray[2]=new float[5];//第三行有五列 System.out.println(floatArray[0][0]);//创建完成后,才能输出 //System.out.println(floatArray[0][3]);数组下标越界 } //intArray数组的第三行第二列的元素为:0 //intArray数组第2行第3列的元素为:9 //0.0 }
四、二维数组的初始化
1、 二维数组的初始化
int[][] a={{1,2,3},{4,5,6},{7,8,9}}; //即为声明并初始化一个int类型的三行三列的数组。
int[][] a={{1,2,3},{4,5,6},{7,8,9}}; //即为声明并初始化一个int类型的三行三列的数组。
行数:num.length;
列数:num[0].length;(表示第一行的列数)
五、案例
1、循环输出二维数组:外层循环控制行数,内层循环控制每行的列数
package com.fiona.javaBasis.day7array_2; //二维数组的输出 public class _02arrayDemo { public static void main(String[] args) { int[][] a={{1,2,3},{4,5,6},{7,8,9}}; for (int i=0;i<a.length;i++){ for (int j=0;j<a[i].length;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } } } //1 2 3 //4 5 6 //7 8 9
2、打印每一科目的平均分和总分(感觉有点难)
方法1:
package com.fiona.javaBasis.day7array_2; /*在一个二维数组中存放了三名学生的语文和数学的成绩, 从键盘输入三名学生的成绩存储到二维数组中, 分别求语文和数学的总成绩及平均分并输出。 运行效果如下: 请输入第1个学生的语文成绩: 80 请输入第1个学生的数学成绩: 90 请输入第2个学生的语文成绩: 70 请输入第2个学生的数学成绩: 20 请输入第3个学生的语文成绩: 50 请输入第3个学生的数学成绩: 70 语文的总共成绩为:200 语文的平均成绩为:66 数学的总共成绩为:180 数学的平均成绩为:60 */ import java.util.Scanner; public class _04arrayDemo_1 { public static void main(String[] args){ //定义一个三行两列的整型二维数组intArray int intArray[][]=new int[3][2]; //从键盘输入学生成绩,要求输入顺序与效果图一致 Scanner sc=new Scanner(System.in); for(int i=0;i<intArray.length;i++){ for(int j=0;j<intArray[i].length;j++){ System.out.println("请输入第"+(i+1)+"个学生的语文成绩:"); intArray[i][j]=sc.nextInt(); System.out.println("请输入第"+(i+1)+"个学生的数学成绩:"); intArray[i][j+1]=sc.nextInt(); break; } } //求语文的总成绩和平均分 int p=intArray[0][0]+intArray[1][0]+intArray[2][0]; int p1=p/intArray.length; System.out.println("语文的总共成绩为:"+p); System.out.println("语文的平均成绩为:"+p1); //求数学的总成绩和平均分 int q=(intArray[0][1]+intArray[1][1]+intArray[2][1]); int q1=q/intArray.length; System.out.println("数学的总共成绩为:"+q); System.out.println("数学的平均成绩为:"+q1); } }
方法2:
package com.fiona.javaBasis.day7array_2; /*在一个二维数组中存放了三名学生的语文和数学的成绩, 从键盘输入三名学生的成绩存储到二维数组中, 分别求语文和数学的总成绩及平均分并输出。 运行效果如下: 请输入第1个学生的语文成绩: 80 请输入第1个学生的数学成绩: 90 请输入第2个学生的语文成绩: 70 请输入第2个学生的数学成绩: 20 请输入第3个学生的语文成绩: 50 请输入第3个学生的数学成绩: 70 语文的总共成绩为:200 语文的平均成绩为:66 数学的总共成绩为:180 数学的平均成绩为:60 */ import java.util.Scanner; public class _03arrayDemo_2 { public static void main(String[] args) { int[][] intArray =new int[3][2]; //从键盘输入学生成绩,要求输入顺序与效果图一致 Scanner sc=new Scanner(System.in); for(int i=0;i<intArray.length;i++){ for(int j=0;j<intArray[i].length;j++){ //使用switch语句判断学科,并输入成绩 switch(j) { case 0: System.out.println("请输入第"+(i+1)+"个学生的语文成绩:");break; case 1: System.out.println("请输入第"+(i+1)+"个学生的数学成绩:");break; } intArray[i][j]=sc.nextInt(); } } //输出输入的成绩,测试数据是否录入 for(int[] n:intArray){ for(int k:n) System.out.print(k+" "); } System.out.println(); int sum1 = 0,sum2=0,pjf1=0,pjf2=0; //求和 for(int i=0;i<intArray.length;i++) { for(int j=0;j<intArray[i].length;j++) { switch(j) { case 0: sum1=sum1+intArray[i][j];break; case 1: sum2=sum2+intArray[i][j];break; } } } //求平均值和输出 pjf1=sum1/(intArray.length); pjf2=sum2/(intArray.length); System.out.println("语文的总成绩为"+sum1); System.out.println("语文的平均分为"+pjf1); System.out.println("数学的总成绩为"+sum2); System.out.println("数学的总成绩为"+pjf2); } }
六、总结
一维数组
声明,创建,初始化,元素的引用,长度,数组的应用
二维数组
是特殊的一维数组 注意!:
1、数组是引用数组数据类型
2、创建数组时,会开辟连续的内存空间
3、数组长度使用length属性获取
4、数组元素的下标从0开始
5、数组下标越界问题