java数组之二维数组

# 学习要点
    1.数据结构
    2.下标要认清
    3.二维数组的遍历
    
# 维度
    0维:点(单独的一个数据)
    1维:由无数个点构成的一条线(由多个单独数据构成的一维数组)
    2维:由无数条线构成的一个面(由多个一维数组构成的二维数组)
    3维:由无数的面构成的立方体(由多个二维数组构成的三维数组)
    4维:由无数个立方体构成的超立方体(由多个三维数组构成的四维数组)
    5维:由多个超立方体构成的平行宇宙(由多个四维数组构成的五维数组)
    总结:n维数组是由多个n-1维数组构成的(n>0)
    
# 二维数组名词属性
    元素:一维数组
    长度:一维数组的个数
    二维数组元素的访问
        - 访问二维数组里面某个一维数组    arr[下标]
        - 访问二维数组里面最底层的元素    arr[x][y]
        
# 二维数组的创建
    - 静态
        int[][] arr = { {1,2,3}, {4,5,6},{7,8,9} }
    
    - 动态
        int[][] arr = new int[a][b];
        a:代表二维数组中一维数组的个数
        b:代表每一个一维数组元素的个数
        可以理解为  a行b列
        
# 二维数组的遍历
    例:

//遍历数组
		System.out.print("+ ");
		for (int i = 1; i <= col; i++) {
			System.out.print(i+" ");
		}
		System.out.println();
		
		for (int i = 0; i < cha.length; i++) {
			System.out.print(i+1+" ");
			for (int j = 0; j < cha[i].length; j++) {
				cha[i][j]='O';
				System.out.print(cha[i][j]+" ");
			}
			System.out.println();
		}


    用java写的打地鼠游戏:

package demo;

import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;

public class Demo01 {
	public static void main(String[] args) {
		int row=4;
		int col=5;
		char[][] cha=new char[row][col];
		int xun=3;//游戏次数
		int mark=0;//初始分数
		System.out.println("*****************");
		System.out.println("欢迎来到打地鼠");
		System.out.println("*****************");
		Random ran = new Random();
		Scanner scan = new Scanner(System.in);
		
		
//		随机洞穴数量
//		int a = ran.nextInt(8) + 2;
//		System.out.println("------------------");
//		System.out.println("洞穴数量【" + a + "】");
		
		
		//遍历数组
		System.out.print("+ ");
		for (int i = 1; i <= col; i++) {
			System.out.print(i+" ");
		}
		System.out.println();
		
		for (int i = 0; i < cha.length; i++) {
			System.out.print(i+1+" ");
			for (int j = 0; j < cha[i].length; j++) {
				cha[i][j]='O';
				System.out.print(cha[i][j]+" ");
			}
			System.out.println();
		}
		
		
		//循环xun次
		int ee=0;//打中次数
		int miss=0;//没打中次数
		for(int a=1;a<=xun;a++) {
			System.out.println();
			System.out.println("第【"+a+"】次游戏,当前分数为【"+mark+"】");
			
			for (int i = 0; i < cha.length; i++) {
				for (int j = 0; j < cha[i].length; j++) {
					cha[i][j]='O';
				}
			}
			
			int r=ran.nextInt(row);
			int c=ran.nextInt(col);
			cha[r][c] ='x';
			System.out.println("按88-重新开始,按99-退出游戏");
			System.out.println("请注意,地鼠已出现!");
			System.out.println("-------------------");
			
			
			//打印图表
			System.out.print("+ ");
			for (int i = 1; i <= col; i++) {
				System.out.print(i+" ");
			}
			System.out.println();
			for (int i = 0; i < cha.length; i++) {
				System.out.print(i+1+" ");
				for (int j = 0; j < cha[i].length; j++) {
					System.out.print(cha[i][j]+" ");
				}
				System.out.println();
			}
			
			
			//判断是否打中
			System.out.println("请输入行:");
			int aa=scan.nextInt();
			
			if(aa==88) {
				a=0;
				mark=0;
				ee=0;
				miss=0;
				System.out.println("本次游戏结束,已重新开始!");
				continue;
			}else if(aa==99) {
				System.out.println("游戏已退出!");
				return;
			}
			
			System.out.println("请输入列:");
			int bb=scan.nextInt();
			
			if(aa==r+1 && bb==c+1) {
				System.out.println("恭喜您成功打中地鼠!分数 +2");
				mark=mark+2;
				ee++;
			}else if(aa==88 || bb==88) {
				a=0;
				mark=0;
				ee=0;
				miss=0;
				System.out.println("本次游戏结束,已重新开始!");
				continue;
			}else if(aa==99 || bb==99) {
				System.out.println("游戏已退出!");
				return;
			}else {
				System.out.println("很遗憾没能打中!分数 -1");
				mark=mark-1;
				miss++;
			}	
		}
		System.out.println("游戏结束!您一共打中【"+ee+"】次,没打中【"+miss+"】次,总分为【"+mark+"】");
		
		
	}
}

棋盘游戏1.0:

package demo;

import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;

public class Demo02 {
	public static void main(String[] args) {
		System.out.println("*********************");
		System.out.println("欢迎使用棋盘程序1.0");
		System.out.println("*********************");
		System.out.println("初始棋盘=============》");
		System.out.println();
		Random ran = new Random();
		Scanner scan = new Scanner(System.in);
		int row = 4; // 棋盘行数
		int col = 2; // 棋盘列数
		char[][] cha = new char[row][col];

		for (int i = 0; i < cha.length; i++) {
			for (int j = 0; j < cha[i].length; j++) {
				cha[i][j] = '-';
			}
		}

		System.out.print("+ ");
		for (int i = 1; i <= col; i++) {
			System.out.print(i + "  ");
		}
		System.out.println();
		for (int i = 0; i < cha.length; i++) {
			System.out.print(i + 1 + " ");
			for (int j = 0; j < cha[i].length; j++) {
				System.out.print(cha[i][j] + "  ");
			}
			System.out.println();
			System.out.println();
		}

		while (true) {
			int total = 0;
			System.out.println("输入行与列进行落子,【0-退出】");
			System.out.println("请输入落子行号:");
			int r = scan.nextInt();

			// 结束程序
			if (r == 0) {
				System.out.println("游戏结束!");
				break;
			}
			System.out.println("请输入落子列号:");
			int c = scan.nextInt();

			// 结束程序
			if (c == 0) {
				System.out.println("游戏结束!");
				break;
			}
			System.out.println("玩家落子后==========》");
			System.out.println("----------------------");

			if (r > 0 && r <= row && c > 0 && c <= col) {
				if (cha[r - 1][c - 1] == '-') {
					cha[r - 1][c - 1] = 'o';
				} else {
					System.out.println("此处有子,无法落子!");
					continue;
				}
			} else {
				System.out.println("超出范围,无法落子!");
				continue;
			}

			System.out.print("+ ");
			for (int i = 1; i <= col; i++) {
				System.out.print(i + "  ");
			}
			System.out.println();
			for (int i = 0; i < cha.length; i++) {
				System.out.print(i + 1 + " ");
				for (int j = 0; j < cha[i].length; j++) {
					System.out.print(cha[i][j] + "  ");
				}
				System.out.println();
				System.out.println();
			}

			// 电脑落子
			while (true) {
				int a = ran.nextInt(row);
				int b = ran.nextInt(col);
				if (cha[a][b] == '-') {
					cha[a][b] = 'x';
					break;
				}
			}
			System.out.println("----------------------");
			System.out.println("电脑落子后==========》");
			System.out.println("----------------------");

			// 打印图表
			System.out.print("+ ");
			for (int i = 1; i <= col; i++) {
				System.out.print(i + "  ");
			}
			System.out.println();
			for (int i = 0; i < cha.length; i++) {
				System.out.print(i + 1 + " ");
				for (int j = 0; j < cha[i].length; j++) {
					System.out.print(cha[i][j] + "  ");
				}
				System.out.println();
				System.out.println();
			}

			// 填满结束程序
			while (true) {
				for (int i = 0; i < cha.length; i++) {
					for (int j = 0; j < cha[i].length; j++) {
						if (cha[i][j] == 'o' || cha[i][j] == 'x') {
							total++;
						}
					}
				}
				if (total == row * col) {
					System.out.println("棋盘填满,游戏结束!");
					return;
				} else if (total < row * col) {
					break;
				}
			}

		}

	}
}


    
# 扫雷程序
    - 利用二维数组构建游戏地图
    int[][]  map
    
    - 展示地图
    + 1 2 3 4 5 
    1 0 0 0 0 0 
    2 0 0 0 0 0 
    3 0 0 0 0 0 
    4 0 0 0 0 0 
    5 0 0 0 0 0 
    
    - 布雷
        随机指定数量的雷(10个雷)
        难点:随机10个位置不能重复
        
    - 排雷
        输入行号,输入列号
        判断如果此位置是雷,直接爆炸,程序结束
        如果不是雷,计算这个位置的元素周围由几个雷
        把雷的数量记录在当前格子中(注意考虑越界的情况)
        
    - 重置地图
    - 退出程序

遇到的问题:

   如何判断棋盘落满并退出游戏

解决方法:在棋盘的while循环里面在嵌套一层while循环,并在第二层while循环里面遍历一遍数组,用if去判断,当遍历到的某个位置有落子时     落子总数total+1(total从0开始),当total==棋盘能落子的最大值时,用return退出main方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 矩阵转置是指将一个二维数值数组按照主对角线进行镜像翻转,即将行和列互换位置。在Java中,可以通过循环遍历数组并交换对应位置的元素来实现矩阵转置。具体步骤如下: 1. 定义一个二维数值数组matrix,表示要进行转置的矩阵。 2. 获取矩阵的行数和列数,分别用变量row和col保存。 3. 创建一个新的二维数值数组result,其行数为col,列数为row。 4. 使用双重循环遍历原矩阵matrix,将matrix[i][j]的值赋给result[j][i]。 5. 返回转置后的矩阵result。 示例代码如下: public static int[][] transpose(int[][] matrix) { int row = matrix.length; int col = matrix[].length; int[][] result = new int[col][row]; for (int i = ; i < row; i++) { for (int j = ; j < col; j++) { result[j][i] = matrix[i][j]; } } return result; } ### 回答2: 二维数值数组Java中常见的数据类型,矩阵是其中的一种形式。而矩阵的转置是一种常见的算法操作,可以通过Java代码实现。 矩阵转置的定义是,将矩阵的行和列互换,得到一个新的矩阵。例如,对于一个3x2的矩阵 1 2 3 4 5 6 它的转置矩阵是2x3的 1 3 5 2 4 6 在Java中,实现矩阵转置需要使用嵌套循环遍历二维数组,并将当前位置的值赋值给它的转置位置。具体步骤如下: 1. 创建一个新的矩阵,用于存储转置后的值。新矩阵的行数和列数与原矩阵相反。 2. 使用嵌套循环遍历原矩阵,将每个元素的行和列下标互换,存储到新的矩阵中对应的位置。 3. 返回新矩阵作为结果。 Java代码实现矩阵转置的示例: public static double[][] transpose(double[][] matrix) { int rows = matrix.length; int cols = matrix[0].length; double[][] transposeMatrix = new double[cols][rows]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transposeMatrix[j][i] = matrix[i][j]; } } return transposeMatrix; } 上述代码中,transpose方法接收一个二维数组matrix,将其转置后返回一个新的二维数组transposeMatrix。该方法首先获取原矩阵的行数和列数,并创建一个新的数组用于存储转置后的结果。 接着,使用嵌套的for循环遍历原矩阵,并将每个元素的行和列下标互换,存储到新矩阵中对应的位置。最后,返回新矩阵作为结果。 总之,Java中的二维数值数组可以方便地存储和操作矩阵,矩阵转置是一个重要的操作之一,可以通过嵌套循环遍历实现。 ### 回答3: Java中的数组是很常用的数据结构,其中二维数值数组也是极为常用的。在二维数值数组中,矩阵是一种很常见的形式,矩阵中的行和列组成了数组的维度,而转置操作则是将矩阵中的行列互换。这里我们来介绍一下如何在Java中实现二维数值数组的矩阵转置。 首先,我们需要明确矩阵转置操作的本质:即将原矩阵中第i行第j列的元素,移动到新矩阵中的第j行第i列。因此我们可以通过两层循环,将原矩阵中每一个元素按照这个规则移动到新矩阵的对应位置上。 代码如下: ``` public static double[][] transpose(double[][] matrix) { int rows = matrix.length; int cols = matrix[0].length; double[][] transposedMatrix = new double[cols][rows]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transposedMatrix[j][i] = matrix[i][j]; } } return transposedMatrix; } ``` 在这个代码中,我们首先获取矩阵的行数和列数。然后我们新建一个与原矩阵相反的矩阵用于存储转置后的结果。接着,我们通过两层循环遍历原矩阵中的每一个元素,并按照转置的规则,将其移动到新矩阵中的对应位置上。最后,我们返回转置后的矩阵。 需要注意的是,这个代码只能用于转置二维数值数组,如果要转置多维数组,需要进行适当的修改。 通过这个方法,我们可以方便地实现二维数值数组的矩阵转置操作。在实际应用中,这个操作常常用于矩阵计算、图像处理等领域。掌握这个操作可以帮助我们更好地理解和应用Java中的数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值