找到
4
篇与
实例程序
相关的结果
-
Java二维数组全方位解析:从基础到实战应用 Java二维数组全方位解析:从基础到实战应用 二维数组是Java中处理结构化数据的重要工具,广泛应用于矩阵运算、表格数据处理、游戏开发等场景。本文将从二维数组的基本概念出发,详细讲解其声明、初始化、访问方式,并通过实战案例展示其具体应用,帮助读者全面掌握二维数组的操作技巧。 一、二维数组的本质与内存结构 在Java中,二维数组本质上是"数组的数组",即一个数组中的每个元素都是另一个数组。这种结构决定了Java的二维数组不一定是规则的矩形,也可以是不规则的锯齿状结构。 从内存角度看,二维数组在内存中表现为: 外层数组(父数组)存储的是内层数组(子数组)的引用 每个子数组在内存中是独立存储的 子数组可以有不同的长度(锯齿状数组的特性) 二维数组内存结构示意图图片 图:Java二维数组的内存存储结构示意 二、二维数组的声明与初始化 2.1 声明方式 Java中二维数组有两种常用声明方式(推荐第一种): // 方式1:推荐使用,更清晰地表示二维数组 int[][] matrix1; // 方式2:与C语言类似,不推荐 int matrix2[][];2.2 初始化方法 2.2.1 静态初始化 直接指定数组元素的值,适用于已知初始数据的场景: // 声明的同时初始化 int[][] intMatrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 不规则二维数组(锯齿数组) String[][] strMatrix = { {"a", "b"}, {"c"}, {"d", "e", "f"} };2.2.2 动态初始化 先指定数组长度,再为元素赋值,适用于初始数据未知的场景: // 方式1:同时指定外层和内层数组长度(规则矩阵) int[][] matrix = new int[3][4]; // 3行4列的整数矩阵 // 方式2:先指定外层长度,再分别初始化内层数组(灵活,可创建锯齿数组) int[][] jaggedMatrix = new int[3][]; jaggedMatrix[0] = new int[2]; // 第0行2列 jaggedMatrix[1] = new int[3]; // 第1行3列 jaggedMatrix[2] = new int[1]; // 第2行1列三、二维数组的基本操作 3.1 访问数组元素 通过双重索引访问二维数组中的元素,格式为数组名[行索引][列索引]: int[][] matrix = { {10, 20, 30}, {40, 50, 60} }; // 访问第1行第2列的元素(索引从0开始) int value = matrix[1][2]; // value = 60 // 修改第0行第1列的元素 matrix[0][1] = 200; // 矩阵变为{{10, 200, 30}, {40, 50, 60}}3.2 获取数组长度 外层数组长度(行数):数组名.length 内层数组长度(列数):数组名[行索引].length int[][] matrix = { {1, 2}, {3, 4, 5}, {6} }; System.out.println("行数:" + matrix.length); // 输出:3 System.out.println("第1行的列数:" + matrix[1].length); // 输出:33.3 遍历二维数组 遍历二维数组需要使用嵌套循环,外层循环遍历行,内层循环遍历列。 3.3.1 使用普通for循环 int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 遍历二维数组 for (int i = 0; i < matrix.length; i++) { // 外层循环:行 for (int j = 0; j < matrix[i].length; j++) { // 内层循环:列 System.out.print(matrix[i][j] + " "); } System.out.println(); // 换行 }3.3.2 使用增强for循环(foreach) int[][] matrix = { {1, 2, 3}, {4, 5, 6} }; for (int[] row : matrix) { // 遍历每一行 for (int num : row) { // 遍历行中的每个元素 System.out.print(num + " "); } System.out.println(); }四、二维数组实战案例 4.1 案例1:创建并输出下三角矩阵 下三角矩阵是指主对角线以上的元素均为0的矩阵,以下代码展示了如何创建并格式化输出一个5×5的下三角矩阵: public class LowerTriangleMatrix { public static void main(String[] args) { int size = 5; int[][] matrix = new int[size][size]; int count = 1; // 填充下三角矩阵 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { // 主对角线及以下区域填充递增数字,以上区域为0 if (j <= i) { matrix[i][j] = count++; } else { matrix[i][j] = 0; } } } // 格式化输出矩阵 System.out.println("5×5下三角矩阵:"); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { // 控制输出格式,确保对齐 if (matrix[i][j] < 10) { System.out.print(matrix[i][j] + " "); } else { System.out.print(matrix[i][j] + " "); } } System.out.println(); // 换行 } } } 运行结果: 5×5下三角矩阵: 1 0 0 0 0 2 3 0 0 0 4 5 6 0 0 7 8 9 10 0 11 12 13 14 15 4.2 案例2:矩阵转置 矩阵转置是将矩阵的行和列进行交换的操作,以下代码实现了这一功能: public class MatrixTransposition { public static void main(String[] args) { // 原始矩阵 3行4列 int[][] original = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; // 计算转置矩阵的行和列 int rows = original.length; int cols = original[0].length; // 创建转置矩阵(行列互换) int[][] transposed = new int[cols][rows]; // 执行转置操作 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transposed[j][i] = original[i][j]; } } // 输出原始矩阵 System.out.println("原始矩阵(3×4):"); printMatrix(original); // 输出转置矩阵 System.out.println("转置矩阵(4×3):"); printMatrix(transposed); } // 打印矩阵的工具方法 private static void printMatrix(int[][] matrix) { for (int[] row : matrix) { for (int num : row) { System.out.print(num + "\t"); } System.out.println(); } } } 运行结果: 原始矩阵(3×4): 1 2 3 4 5 6 7 8 9 10 11 12 转置矩阵(4×3): 1 5 9 2 6 10 3 7 11 4 8 12 4.3 案例3:矩阵乘法 矩阵乘法是线性代数中的基本运算,要求第一个矩阵的列数等于第二个矩阵的行数,结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数: public class MatrixMultiplication { public static void main(String[] args) { // 矩阵A:2行3列 int[][] matrixA = { {1, 2, 3}, {4, 5, 6} }; // 矩阵B:3行2列(满足乘法条件:A的列数=B的行数) int[][] matrixB = { {7, 8}, {9, 10}, {11, 12} }; // 计算结果矩阵(2行2列) int[][] result = multiplyMatrices(matrixA, matrixB); // 输出结果 System.out.println("矩阵A × 矩阵B 的结果:"); printMatrix(result); } // 矩阵乘法实现 private static int[][] multiplyMatrices(int[][] a, int[][] b) { int aRows = a.length; int aCols = a[0].length; int bRows = b.length; int bCols = b[0].length; // 检查是否可以相乘(a的列数必须等于b的行数) if (aCols != bRows) { throw new IllegalArgumentException("矩阵A的列数必须等于矩阵B的行数"); } // 结果矩阵初始化 int[][] result = new int[aRows][bCols]; // 矩阵乘法核心逻辑 for (int i = 0; i < aRows; i++) { // 结果矩阵的行 for (int j = 0; j < bCols; j++) { // 结果矩阵的列 for (int k = 0; k < aCols; k++) { // 累加计算 result[i][j] += a[i][k] * b[k][j]; } } } return result; } // 打印矩阵 private static void printMatrix(int[][] matrix) { for (int[] row : matrix) { for (int num : row) { System.out.print(num + "\t"); } System.out.println(); } } } 运行结果: 矩阵A × 矩阵B 的结果: 58 64 139 154 五、二维数组常见错误与避坑指南 索引越界异常(ArrayIndexOutOfBoundsException) 原因:访问了超出数组长度的索引 避免:使用array.length和array[i].length控制循环范围 空指针异常(NullPointerException) 原因:访问了未初始化的内层数组 避免:动态初始化时确保所有内层数组都已正确初始化 锯齿数组的遍历问题 注意:不同行可能有不同的列数 解决:内层循环条件使用matrix[i].length而非固定值 数组复制误区 错误:直接使用array1 = array2(仅复制引用) 正确:使用双重循环逐个元素复制,或Arrays.copyOf()方法 六、总结与拓展 二维数组作为Java中处理结构化数据的重要工具,其核心操作包括声明初始化、元素访问、遍历和修改。通过本文的学习,我们掌握了: 二维数组的内存结构与本质(数组的数组) 多种声明和初始化方式的适用场景 嵌套循环在数组遍历中的应用 矩阵相关的实战案例(下三角矩阵、转置、乘法) 常见错误的避免方法 在实际开发中,二维数组常用于: 游戏开发中的地图表示(如棋盘、地形网格) 科学计算中的矩阵运算 数据分析中的表格数据处理 图像处理中的像素矩阵操作 掌握二维数组的操作是深入学习Java数据结构的基础,后续可以进一步学习ArrayList等集合框架,它们在处理动态二维数据时提供了更灵活的选择。
-
Java键盘输入获取个十百位 这段Java代码是一个简单的程序,用于接收用户输入的一个三位数,并将其分解为个位、十位和百位数字,然后分别打印出来。下面是代码的详细解释: 导入所需类库: import java.util.Scanner;:导入Scanner类,用于从控制台接收用户输入。 定义主类: public class huoqu { ... }:定义了一个名为huoqu的公共类,Java程序的入口点通常位于此类的main方法中。 主方法 (main 方法): public static void main(String[] args) { ... }:这是Java应用程序的入口点。当程序运行时,main方法会被自动调用。 创建Scanner对象: Scanner sc = new Scanner(System.in);:创建Scanner对象sc,用于从标准输入(通常是键盘)读取数据。 提示用户输入: System.out.println("请输入一个三位数:");:打印提示信息,告诉用户需要输入什么。 读取用户输入的三位数: int num = sc.nextInt();:从用户那里读取一个整数并存储在变量num中。 计算并分解数字: 分别计算个位、十位和百位: int ge = num % 10;:计算个位数,使用取模运算(%),得到num除以10的余数。 int shi = num / 10 % 10;:计算十位数,先除以10去除个位,再对结果取模得到十位。 int bai = num / 10 / 10 % 10;:计算百位数,连续两次除以10去除个位和十位,最后取模得到百位。 打印结果: 使用System.out.println分别打印出个位、十位和百位的值。 综上所述,这个程序的主要功能是接收用户输入的一个三位数,然后解析出这个数字的每个位上的数值,并将它们打印出来。 示例代码: import java.util.Scanner; public class huoqu { public static void main(String[]args){ //输入一个三位数,获取其中的个位,十位,百位 //获取键盘输入 Scanner sc = new Scanner(System.in); System.out.println("请输入一个三位数:"); int num = sc.nextInt(); //获取个位,十位,百位 //公式: //个位:num % 10 //十位:num / 10 % 10 //百位:num / 10 / 10 % 10 //下面开始实现 int ge = num % 10; int shi = num / 10 % 10; int bai = num / 10 / 10 % 10; System.out.println("个位是:" + ge); System.out.println("十位是:" + shi); System.out.println("百位是:" + bai); } } 运行效果: 863417465.png图片
-
用Java编写九九乘法口诀表 在Java中编写九九乘法口诀(也称为乘法表)可以通过使用嵌套的for循环来实现。下面是一个简单的Java程序,它打印出九九乘法口诀: public class MultiplicationTable { public static void main(String[] args) { // 外层循环控制行数 for (int i = 1; i <= 9; i++) { // 内层循环控制列数 for (int j = 1; j <= i; j++) { // 计算乘积并打印 int product = i * j; // 打印格式可以根据需要调整,这里使用制表符\t来对齐 System.out.print(j + "x" + i + "=" + product + "\t"); } // 每打印完一行后换行 System.out.println(); } } }运行这个程序,你会在控制台看到以下输出: 屏幕截图 2024-11-18 235521.png图片 注意,这个示例使用了制表符\t来对齐输出的乘法表达式和结果,但制表符可能不会在所有的控制台或文本编辑器中完美对齐。如果需要更精细的对齐,可以考虑使用System.out.printf方法配合格式化字符串来实现。
-
用Java简单编写一个计算器程序 简单用Java写了一个计算器程序 下面是对代码的解释: 当然可以,下面是对你提供的jisuanqi(意为“计算器”的拼音)Java程序的详细解释: 导入Scanner类 import java.util.Scanner;这行代码导入了Java的Scanner类,该类用于从各种输入源(如控制台)读取数据。 定义类 public class jisuanqi {这里定义了一个名为jisuanqi的公共类。在Java中,每个可执行的程序都需要至少一个公共类,并且该类中需要有一个main方法作为程序的入口点。 main方法 public static void main(String[] args) {这是Java程序的入口点。当你运行一个Java程序时,JVM会查找main方法并开始执行。 创建Scanner对象 Scanner scanner = new Scanner(System.in);这行代码创建了一个Scanner对象,并关联到System.in(标准输入流,通常是键盘)。之后,你可以使用scanner对象来读取从控制台输入的数据。 读取第一个数字 System.out.print("请输入第一个数字: "); double num1 = scanner.nextDouble();首先,程序输出提示信息让用户输入第一个数字。然后,使用scanner.nextDouble()方法读取用户输入的双精度浮点数,并将其存储在num1变量中。 读取运算符 System.out.print("请输入运算符 (+, -, *, /): "); String operator = scanner.next();类似地,程序输出提示信息让用户输入运算符,并读取用户输入的字符串(运算符),将其存储在operator变量中。 读取第二个数字 System.out.print("请输入第二个数字: "); double num2 = scanner.nextDouble();再次,程序输出提示信息让用户输入第二个数字,并将其存储在num2变量中。 计算 使用switch语句根据用户输入的运算符进行不同的计算。 对于加法、减法和乘法,直接执行相应的运算。 对于除法,首先检查除数(num2)是否为零,如果为零,则输出错误消息并退出程序;否则,执行除法运算。 输出结果 System.out.printf("%.2f %s %.2f = %.2f%n", num1, operator, num2, result);使用printf方法格式化并输出计算结果。这里,%.2f表示双精度浮点数,保留两位小数;%s表示字符串;%n表示换行。 退出程序 如果在switch语句中遇到无效的运算符或除数为零的情况,程序会执行return语句,从而退出main方法,结束程序的执行。 总之,这个jisuanqi类是一个简单的命令行计算器,它允许用户输入两个数字和一个运算符,然后执行相应的数学运算并显示结果。 完整的计算器代码: import java.util.Scanner; public class jisuanqi{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个数字: "); double num1 = scanner.nextDouble(); System.out.print("请输入运算符 (+, -, *, /): "); String operator = scanner.next(); System.out.print("请输入第二个数字: "); double num2 = scanner.nextDouble(); double result; switch (operator) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": if (num2 != 0) { result = num1 / num2; } else { System.out.println("除数不能为0"); return; // 退出程序 } break; default: System.out.println("无效的运算符"); return; // 退出程序 } System.out.printf("%.2f %s %.2f = %.2f%n", num1, operator, num2, result); } }