Java二维数组:声明、初始化、取值

本文详细介绍了在Java中如何声明和初始化二维数组,包括不同形式的声明方式,创建数组时指定行数和列数的方法,以及如何在声明时同时初始化数组。此外,还讲解了在初始化时仅指定行数的特殊情况,以及如何避免空指针异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.二维数组声明初始化

public class TestDemo {

	public static void main(String[] args) {
		
		// 二维数组的声明,一下三种形式均可
		int[][] intArray;
		float[] floatArray[];
		double[] doubleArray[]; //这种方式也可以
		
		// 创建一个数组 (二维数组也有默认值)
		intArray = new int[3][3]; // 第一个'[]'中填写行数,第二个'[]'中填写列数
		
		// 给二维数组的元素赋值
		intArray[1][2] = 9;
		
		//声明数组的同时进行创建
		char[][] ch= new char[3][5];
		
		// 创建数组的同时,只指定行数。new float[][];和new float[][3];这两种写法错误
		floatArray = new float[3][];
		// 此时,若取 floatArray[2][1],会报空指针异常。
		/**
		 * 一个行数为3的二维数组可以认为由3个一维数组组成,对于floatArray[2][1],其floatArray[2]可以代表该二维
		 * 数组的第三个一维数组,因为其三个一维数组均未被初始化,所以上面会报空指针异常。
		 * 解决方案如下:
		 */
		floatArray[0] = new float[3];    // 第一行有3列
		floatArray[1] = new float[4];    // 第二行有4列
		floatArray[2] = new float[5];    // 第三行有5列
		// 此时,二维数组中的每一个元素都已经被默认初始化了,再进行 floatArray[2][1]便不会有空指针异常了
		}

}

(1)二维数组初始化时,行数一定要有,列数可有可没有;

(2)二维数组初始化,一定要二次初始化,否则会空指针异常

注:根据以往经验,二维数组使用的并不多

2.二维数组,直接初始化,取值

public class TestDemo {

	public static void main(String[] args) {
		int[][] num = {{1,2,3},{4,5},{6,7,8,9}};
		
		// num.length:二维数组的行数
		for(int i=0;i<num.length;i++){
			
			// num[i].length:二维数组第i-1行的列数
			for(int j=0;j<num[i].length;j++){
				System.out.print(num[i][j]+" ");
			}
			System.out.println();	
		}
	}

}

 

主要内容: 1. 数组的定义 2. 数组的分类[按维数] 3. 数组的用法 4. 数组的常见操作 java中的foreach实现方式 一维数组 1. 定义:省略 2. 用法: 声明并赋: //方法一:先声明,再赋 int [] arr=new int[5]; arr[0]=10; arr[4]=100; arr[5]=10;//语法无误,编译时报错:java.lang.ArrayIndexOutOfBoundsException System.out.println(arr[5]);//语法无误,编译时报错:错误同上 //方法二:使用for循环动态赋 //导入java.util.*;包 Scanner input=new Scanner(System.in); int [] arr=new int[5]; for(int i=0;i<arr.length;i++) { System.out.println("请输入第"+(i+1)+"个"); arr[i]=input.nextInt(); } //方法三:声明时赋 int [] arr=new int[]{23,45,56,67}; int [] arr1={23,45,56,67}; int [] arr2= new int[5]{23,45,56,67};//错误,此时不能给确定的长度 输出: int [] arr=new int[]{23,45,56,67}; //方法一:使用for循环输出 for(int i=0;i<arr.length;i++) { System.out.println(arr[i]); } //方法二:使用foreach输出:此为JDK5.0 新特性 for(int item : arr) { System.out.println(item); } 常见算法: 1. 求一维数组中的最大[小] 2. 求一维数组中的总和,平均 3. 添加,删除,修改,搜索等 具体请参考本人FTP\\5.0S1\\JAVA\\数组完整操作范例。[重复让人如此崩溃!] 二维数组 1. 定义:省略 2. 用法: 声明并赋: //声明时赋 int [][]arr={ {1,2,3}, {4,5,6}, {7,8,9} }; 输出: //方法一:使用嵌套for循环输出二维数组 for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { System.out.print(arr[i][j]+" "); } System.out.println(); } //方法二:使用嵌套foreach输出二维数组 for(int row[] :arr) //此时不难看出,二维数组可以看作是每个元素都是一个一维数组的一维数组 { for(int item: row) { System.out.print(item+ " "); } System.out.println(); } 补充: //动态创建规则二维数组 int R=10;//行 int N=5;//列 int [][]arr=new int ­[N]; //动态创建不规则二维数组 int arr[][]; arr=new int[2][]; arr[0]=new int[10]; arr[1]=new int[5]; 赋都一样:此处省略! 算法体验:杨辉三角 int i,j; int a[][]=new int[10][10]; //给每行的第一列,及对角线处均赋为1 for(i=0;i<10;i++) { a[i][0]=1; a[i][i]=1; } //从arr[2][1]=a[1][0]+a[1][1]; //推出:a[i][j]=a[i-1][j-1]+a[i-1][j]; //即元素等于两肩之和 for(i=2;i<10;i++) { for(j=1;j<i;j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<10;i++) { for(j=0;j<=i;j++) { System.out.print(a[i][j]+" "); } System.out.println(); }
### Java 二维数组排序示例 在Java中,可以使用`Arrays.sort()`方法配合自定义比较器来对二维数组进行排序。下面展示如何定义一个5×8的二维数组并填充随机数,之后按照不同条件对其进行排序。 #### 定义并初始化二维数组 先创建指定大小的二维整型数组,并利用循环结构与`Math.random()`函数为其赋予介于特定范围内的伪随机: ```java import java.util.Arrays; import java.util.Random; public class TwoDArraySortExample { public static void main(String[] args) { final int ROWS = 5; final int COLS = 8; Random rand = new Random(); // 初始化二维数组 int[][] array = new int[ROWS][COLS]; for (int i = 0; i < ROWS; ++i){ for(int j = 0; j < COLS; ++j){ array[i][j] = rand.nextInt(100); // 随机数取值区间可根据需求调整 } } // 打印原始数据 System.out.println("Original Array:"); printMatrix(array); ``` 此部分实现了二维数组声明、实例化以及通过嵌套for循环完成对其各元素位置上的随机赋操作[^4]。 #### 对二维数组进行简单排序 接下来演示基于单个维度(比如首列)实施升序排列的方式: ```java // 单一标准排序:依据第零列递增顺序重排各行 Arrays.sort(array, (row1, row2) -> Integer.compare(row1[0], row2[0])); System.out.println("\nSorted by first column ascendingly:"); printMatrix(array); ``` 这里采用了Lambda表达式的简洁语法形式替代传统匿名内部类作为Comparator接口的具体实现方式[^2]。 #### 复杂多级排序逻辑 当存在多个排序关键字时,则需构建更为复杂的比较规则链路,在遇到相同主键的情况下继续考察次级字段直至得出最终判定结果为止: ```java // 组合条件排序:优先考虑第一列升序,其次才是第二列降序 Arrays.sort(array, (r1, r2) -> !Objects.equals(r1[0], r2[0]) ? Integer.compare(r1[0], r2[0]) : Integer.compare(r2[1], r1[1]) ); System.out.println("\nComplex sorting with multiple criteria:"); printMatrix(array); } static void printMatrix(int[][] matrix){ for(var row : matrix){ System.out.println(Arrays.toString(row)); } } ``` 上述代码片段展示了更精细粒度下的多重属性联合排序策略——即不仅限于单一指标考量而是综合评估对象间关系从而获得更加合理有序的结果集呈现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值