5.1java基础语法(二维数组)

来源:互联网 发布:云帆翻墙软件下载 编辑:程序博客网 时间:2024/05/18 03:09

 二维数组:就是元素为一维数组的一个数组

一、1格式1

数据类型[][]数组名= new 数据类型[m][n];

m:表示这个二维数组有多少个一维数组。

n:表示每一个一维数组的元素有多少个。

2)注意:

A:以下格式也可以表示二维数组

a:数据类型 数组名[][] = new 数据类型[m][n];

b:数据类型[]数组名[] = new数据类型[m][n];

B:注意下面定义的区别

int x;

int y;

int x,y;

int[] x;  //定义一个一维数组

int[] y[]; //定义一个二维数组

int[] x,y[];//定义一个一维数组和一个二维数组

3)举例:

class Array2Demo {

public static void main(String[] args) {

 //定义一个二维数组

 int[][] arr = new int[3][2];

 //定义了一个二维数组arr

 //这个二维数组有3个一维数组的元素

 //每一个一维数组有2个元素

 //输出二维数组名称

 System.out.println(arr); //地址值[[I@175078b

 //输出二维数组的第一个元素一维数组的名称

 System.out.println(arr[0]); //地址值[I@42552c

 System.out.println(arr[1]); //地址值[I@e5bbd6

 System.out.println(arr[2]); //地址值[I@8ee016

 //输出二维数组的元素

 System.out.println(arr[0][0]); //0

 System.out.println(arr[0][1]); //0

}

}


图解如下:


二、1)格式2

数据类型[][]数组名= new 数据类型[m][];

m:表示这个二维数组有多少个一维数组。

列数没有给出,可以动态的给。这一次是一个变化的列数。

2)举例:

class Array2Demo2 {

public static void main(String[] args) {

//定义数组

int[][] arr = new int[3][];

System.out.println(arr);//[[I@175078b

System.out.println(arr[0]); //null

System.out.println(arr[1]); //null

System.out.println(arr[2]); //null

//动态的为每一个一维数组分配空间

arr[0] = new int[2];

arr[1] = new int[3];

arr[2] = new int[1];

System.out.println(arr[0]); //[I@42552c

System.out.println(arr[1]); //[I@e5bbd6

System.out.println(arr[2]); //[I@8ee016

System.out.println(arr[0][0]); //0

System.out.println(arr[0][1]); //0

//ArrayIndexOutOfBoundsException

//System.out.println(arr[0][2]); //错误

arr[1][0] = 100;

arr[1][2] = 200;

}

}


图解如下:

 

三、1)格式3

基本格式:

数据类型[][]数组名= new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

简化版格式:

数据类型[][]数组名= {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

2)举例:

int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};

int[][] arr = {{1,2,3},{4,5},{6}};

 

class Array2Demo3 {

public static void main(String[] args) {

//定义数组

int[][] arr = {{1,2,3},{4,5},{6}};

System.out.println(arr);

System.out.println(arr[0]);

System.out.println(arr[1]);

System.out.println(arr[2]);

System.out.println(arr[0][0]); //1

System.out.println(arr[1][0]); //4

System.out.println(arr[2][0]); //6

System.out.println(arr[0][1]); //2

System.out.println(arr[1][1]); //5

//越界

System.out.println(arr[2][1]); //错误

}

}


图解如下:


 

四、练习

1/*

需求:二维数组遍历

外循环控制的是二维数组的长度,其实就是一维数组的个数。

内循环控制的是一维数组的长度。

*/

class Array2Test {

public static void main(String[] args) {

//定义一个二维数组

int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};

//请问谁代表{1,2,3}

//arr[0]就是第一个数组

//arr[0] = {1,2,3};

for(int x=0; x<arr[0].length; x++) {

System.out.println(arr[0][x]);

}

System.out.println("--------------");

for(int x=0; x<arr[1].length; x++) {

System.out.println(arr[1][x]);

}

System.out.println("--------------");

for(int x=0; x<arr[2].length; x++) {

System.out.println(arr[2][x]);

}

System.out.println("--------------");

//用循环改进

for(int x=0; x<3; x++) {

for(int y=0; y<arr[x].length; y++) {

System.out.print(arr[x][y]+" ");

}

System.out.println();

}

System.out.println("--------------");

//这个时候,注意了,3是我们根据上面的代码得出来的

//但是,它不能针对任何的数组都可以这样

//所以,我们应该想办法改进

//其实,外面的这个循环的长度就是二维数组的长度

for(int x=0; x<arr.length; x++) {

for(int y=0; y<arr[x].length; y++) {

System.out.print(arr[x][y]+" ");

}

System.out.println();

}

System.out.println("--------------");

//用方法改进

//调用方法

printArray2(arr);

System.out.println("--------------");

//我们再来一个列数是变化的

int[][] arr2 = {{1,2,3},{4,5},{6}};

printArray2(arr2);

}

/*

需求:遍历二维数组

两个明确:

返回值类型:void

参数列表:int[][] arr

*/

public static void printArray2(int[][] arr) {

for(int x=0; x<arr.length; x++) {

for(int y=0; y<arr[x].length; y++) {

System.out.print(arr[x][y]+" ");

}

System.out.println();

}

}

}

 

2/*

公司年销售额求和

某公司按照季度和月份统计的数据如下:单位(万元)

第一季度:22,66,44

第二季度:77,33,88

第三季度:25,45,65

第四季度:11,66,99

分析:

A:把题目的数据用二维数组来表示

int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};

B:如何求和呢?

求和其实就是获取到每一个元素,然后累加即可。

C:定义一个求和变量sum,初始化值是0

D:通过遍历就可以得到每一个二维数组的元素。

E:把元素累加即可。

F:最后输出sum,就是结果。

*/

class Array2Test2 {

public static void main(String[] args) {

//把题目的数据用二维数组来表示

int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};

//定义一个求和变量sum,初始化值是0

int sum = 0;

//通过遍历就可以得到每一个二维数组的元素。

for(int x=0; x<arr.length; x++) {

for(int y=0; y<arr[x].length; y++) {

//把元素累加即可。

sum += arr[x][y];

}

}

//最后输出sum,就是结果。

System.out.println("一年的销售额为:"+sum+"万元");

}

}

 

3)/*

输出杨辉三角:

              1

          1  1

          1  2  1

          1  3  3  1

          1  4  6  4  1

          ······

 

分析:看这种图像的规律

A:任何一行的第一列和最后一列都是1

B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

步骤:

A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n

  这个n的数据来自于键盘录入。

B:给这个二维数组任何一行的第一列和最后一列赋值为1

C:按照规律给其他元素赋值

从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

D:遍历这个二维数组。

*/

import java.util.Scanner;

 

class Array2Test3 {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in);

//这个n的数据来自于键盘录入。

System.out.println("请输入一个数据:");

int n = sc.nextInt();

//定义二维数组

int[][] arr = new int[n][n];

//给这个二维数组任何一行的第一列和最后一列赋值为1

for(int x=0; x<arr.length; x++) {

arr[x][0] = 1; //任何一行第1

arr[x][x] = 1; //任何一行的最后1

}

//按照规律给其他元素赋值

//从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

for(int x=2; x<arr.length; x++) {

//这里如果y<=x是有个小问题的,就是最后一列的问题

//所以这里要减去1

//并且y也应该从1开始,因为第一列也是有值了

for(int y=1; y<=x-1; y++) {

//每一个数据是它上一行的前一列和它上一行的本列之和。

arr[x][y] = arr[x-1][y-1] + arr[x-1][y];

}

}

//遍历这个二维数组。

/*

for(int x=0; x<arr.length; x++) {

for(int y=0; y<arr[x].length; y++) {

System.out.print(arr[x][y]+"\t");

}

System.out.println();

}

*/

//这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似

for(int x=0; x<arr.length; x++) {

for(int y=0; y<=x; y++) {

System.out.print(arr[x][y]+"\t");

}

System.out.println();

}

}

}