Java 二维数组(保存方式、遍历方式)

本文介绍了Java中二维数组的创建、输出(包括类型、内存地址、元素数据)、长度获取以及遍历的方法,通过实例展示了如何在随机位置存储特定字符并打乱顺序。
摘要由CSDN通过智能技术生成

二维数组就是“数组的数组”:保存N个一维数组,二维数组的每个数组元素的长度都不要求相同

二维数组的保存

二维数组通过int[][] array {{1,2,3},{11,21,31,41,51},{33,44,55,66,77,88,99},{0,0}};来保存数组

二维数组的输出

  • 直接打印二维数组,输出二维数组的类型和内存地址
  • Arrays.toString()方法,输出二维数组中每个一维数组的类型和内存地址
  • Arrays.deepToString()方法,输出二维数组的所有元素数据
  • 二维数组的长度:该二维数组中所包括的一维数组的个数
  • 通过一个下标,访问二维数组中的指定一维数组
  • 通过2个下标,访问二维数组中的指定元素(指定一维数组的指定下标元素)
import java.util.Arrays;

public class Test {
	public static void main(String[] args) {
		//一维数组:保存1组数据
		int[] arr1 = {1,2,3,4};
		int[] arr2 = {11,21,31,41,51};
		int[] arr3 = {13,15,16,23,25,27};
		System.out.println(arr1);
		
		//二维数组:保存N组数据(每组数据都是一个一维数组)
		int[][] array = {
				{1,2,3,4},
				{11,21,31,41,51},
				{13,15,16,23,25,27},
				{33,44,55,66,77,88,99},
				{0,0}
		};
		System.out.println("二维数组的类型和内存地址:"+array);
		System.out.println("二维数组的所有一维数组:"+Arrays.toString(array));
		System.out.println("二维数组的所有元素数据:"+Arrays.deepToString(array));
		System.out.println("二维数组的长度:"+array.length);
		System.out.println("二维数组的头数组:"+Arrays.toString(array[0]));
		System.out.println("二维数组的头数组中的头元素:"+array[0][0]);
	}
}

运行结果:

[I@5e265ba4
二维数组的类型和内存地址:[[I@156643d4
二维数组的所有一维数组:[[I@123a439b, [I@7de26db8, [I@1175e2db, [I@36aa7bc2, [I@76ccd017]
二维数组的所有元素数据:[[1, 2, 3, 4], [11, 21, 31, 41, 51], [13, 15, 16, 23, 25, 27], [33, 44, 55, 66, 77, 88, 99], [0, 0]]
二维数组的长度:5
二维数组的头数组:[1, 2, 3, 4]
二维数组的头数组中的头元素:1

二维数组的遍历

和一维数组一样使用for循环或者foreach进行遍历

import java.util.Arrays;

public class Test {
	public static void main(String[] args) {
		//遍历二维数组
		int[][] array = {
				{1,2,3,4},
				{11,21,31,41,51},
				{13,15,16,23,25,27},
				{33,44,55,66,77,88,99},
				{0,0}
		};
		//方式1:使用下标
		for(int i = 0;i < array.length;i++) {
			for(int k = 0;k <array[i].length;k++) {
				System.out.print(array[i][k]+"\t");
			}
		}
		System.out.println();
		//方式2:使用foreach
		for(int[] ns: array) {
			for(int n : ns) {
				System.out.print(n+"\t");
			}
			System.out.println();
		}
	}
}

运行结果:

1	2	3	4	11	21	31	41	51	13	15	16	23	25	27	33	44	55	66	77	88	99	0	0	
1	2	3	4	
11	21	31	41	51	
13	15	16	23	25	27	
33	44	55	66	77	88	99	
0	0	

例题:随机位置存储1个H,2个S,3个X,其余位置填充O,生成该二维数组中的值

解:创建一个二维数组;打乱9次(k不止控制打乱的次数);打乱ns数组,将打乱后的数组存入一个新的us数组中,并循环放入map的第i行;遍历的输出这个二维数组

import java.util.Arrays;
public class Test11 {
	public static void main(String[] args) {
		char[][] map = new char[9][9];
	      for (int k = 0; k < 9; k++) {
	    	  char[] ns = {'H', 'S', 'S', 'X', 'X', 'X', 'O', 'O', 'O'};
	          for (int i = ns.length - 1; i > 0; i--) {
	              int index = (int) (Math.random() * i);
	              ns[index] = (char) (ns[index] ^ ns[i]);
	              ns[i] = (char) (ns[index] ^ ns[i]);
	              ns[index] = (char) (ns[index] ^ ns[i]);
	          }
	          //将打乱后的数组存入一个新的us数组中,并循环放入map的第i行
	          char[] us = new char[9];
	          System.arraycopy(ns, 0, us, 0, us.length);
	          map[k] = us;
	      }
	      //遍历的输出这个二维数组
	      for (char[] chs : map) {
	          for (char c : chs) {
	        	  System.out.printf(c + "\t");
	          }
	          System.out.println();
	      }
	}
}

运行结果:

X	X	O	S	O	X	S	O	H	
S	S	O	X	O	O	X	X	H	
X	H	O	O	S	O	S	X	X	
X	X	O	O	O	S	X	H	S	
X	O	O	S	S	H	X	O	X	
O	X	S	O	X	H	S	O	X	
S	O	X	X	X	O	S	O	H	
O	X	O	H	S	S	O	X	X	
X	O	H	O	S	X	X	O	S	

主要内容: 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(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值