
在java中,二维数组本质上是数组的数组。我们可以根据用户输入动态地定义其行数和列数,并填充数组元素。
首先,我们需要获取用户期望的行数和列数,然后使用这些值来声明一个二维数组。
import java.util.Scanner;
public class MatrixOperations {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入矩阵的行数 (m): ");
int m = sc.nextInt();
System.out.print("请输入矩阵的列数 (n): ");
int n = sc.nextInt();
// 声明一个m行n列的二维数组
int[][] originalMatrix = new int[m][n];
// ... 后续输入和操作
}
}使用嵌套循环遍历二维数组的每一个位置,并通过Scanner读取用户输入的整数值。
System.out.println("请输入矩阵的元素 (共 " + (m * n) + " 个): ");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.print("请输入元素 [" + i + "][" + j + "]: ");
originalMatrix[i][j] = sc.nextInt();
}
}注意事项: 确保内层循环和外层循环的条件正确 (i < m 和 j < n),这样才能确保所有m * n个元素都被正确读取。如果用户反馈只显示了少量元素,很可能是输入循环或显示循环逻辑有误,导致未能完全遍历。
同样使用嵌套循环来遍历并打印数组的每一个元素。为了使输出更具可读性,每打印完一行后换行。
立即学习“Java免费学习笔记(深入)”;
public static void printMatrix(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
System.out.println("矩阵为空或维度不合法。");
return;
}
System.out.println("矩阵内容如下:");
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + "\t"); // 使用制表符分隔,保持对齐
}
System.out.println(); // 每行结束后换行
}
}将一个m行n列的矩阵originalMatrix进行90度顺时针旋转,会得到一个n行m列的新矩阵rotatedMatrix。
其核心映射关系如下: 如果原始矩阵中的元素位于 (i, j)(即第 i 行,第 j 列),那么在旋转后的矩阵中,它将移动到 (j, m - 1 - i)。
因此,originalMatrix[i][j] 会被放置到 rotatedMatrix[j][m - 1 - i]。
由于旋转后的矩阵维度发生了变化(从m x n变为n x m),我们通常需要创建一个新的辅助矩阵来存储旋转结果,而不是在原地进行旋转(原地旋转对于方阵来说是可能的,但对于非方阵则更为复杂且不直观)。
根据上述原理,我们可以编写一个rotate方法来执行矩阵旋转。
public class MatrixOperations {
// ... (main方法和printMatrix方法)
/**
* 将给定的矩阵顺时针旋转90度。
* @param originalMatrix 原始矩阵 (m行n列)
* @return 旋转后的新矩阵 (n行m列)
*/
public static int[][] rotateMatrix90DegreesClockwise(int[][] originalMatrix) {
if (originalMatrix == null || originalMatrix.length == 0 || originalMatrix[0].length == 0) {
System.out.println("无法旋转空矩阵或维度不合法的矩阵。");
return new int[0][0]; // 返回一个空矩阵
}
int m = originalMatrix.length; // 原始矩阵的行数
int n = originalMatrix[0].length; // 原始矩阵的列数
// 创建一个新的矩阵来存储旋转结果,新矩阵的维度是 n行m列
int[][] rotatedMatrix = new int[n][m];
// 遍历原始矩阵的每一个元素,并将其放置到旋转后矩阵的正确位置
for (int i = 0; i < m; i++) { // 遍历原始矩阵的行
for (int j = 0; j < n; j++) { // 遍历原始矩阵的列
// 原始矩阵的 (i, j) 元素移动到新矩阵的 (j, m - 1 - i) 位置
rotatedMatrix[j][m - 1 - i] = originalMatrix[i][j];
}
}
return rotatedMatrix;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入矩阵的行数 (m): ");
int m = sc.nextInt();
System.out.print("请输入矩阵的列数 (n): ");
int n = sc.nextInt();
int[][] originalMatrix = new int[m][n];
System.out.println("请输入矩阵的元素 (共 " + (m * n) + " 个): ");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.print("请输入元素 [" + i + "][" + j + "]: ");
originalMatrix[i][j] = sc.nextInt();
}
}
System.out.println("\n--- 原始矩阵 ---");
printMatrix(originalMatrix);
// 调用旋转方法
int[][] rotatedMatrix = rotateMatrix90DegreesClockwise(originalMatrix);
System.out.println("\n--- 旋转90度顺时针后的矩阵 ---");
printMatrix(rotatedMatrix);
sc.close();
}
}代码解析:
本教程详细介绍了如何在Java中处理二维数组的用户输入、显示以及90度顺时针旋转。通过理解矩阵旋转的数学映射关系,并结合动态尺寸处理和辅助矩阵的方法,我们可以实现一个健壮且通用的旋转功能。掌握这些基本操作对于进行更复杂的矩阵运算和图形处理至关重要。始终记住,良好的编程实践包括动态尺寸处理、清晰的逻辑和适当的错误处理。
以上就是Java二维数组用户输入与90度顺时针旋转教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号