首页 > Java > java教程 > 正文

Java二维数组用户输入与90度顺时针旋转教程

DDD
发布: 2025-10-01 11:47:01
原创
413人浏览过

Java二维数组用户输入与90度顺时针旋转教程

本教程详细讲解了如何在Java中实现二维数组(矩阵)的用户输入、遍历显示以及90度顺时针旋转。文章首先阐述了通过Scanner类动态创建和填充矩阵的方法,随后深入探讨了矩阵旋转的数学原理,并提供了一个针对任意m x n矩阵的健壮旋转算法实现,旨在帮助开发者避免常见错误并掌握高效的矩阵操作技巧。

理解二维数组的创建与用户输入

java中,二维数组本质上是数组的数组。我们可以根据用户输入动态地定义其行数和列数,并填充数组元素。

1. 声明二维数组

首先,我们需要获取用户期望的行数和列数,然后使用这些值来声明一个二维数组。

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];

        // ... 后续输入和操作
    }
}
登录后复制

2. 通过Scanner获取用户输入

使用嵌套循环遍历二维数组的每一个位置,并通过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个元素都被正确读取。如果用户反馈只显示了少量元素,很可能是输入循环或显示循环逻辑有误,导致未能完全遍历。

3. 显示数组内容

同样使用嵌套循环来遍历并打印数组的每一个元素。为了使输出更具可读性,每打印完一行后换行。

立即学习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(); // 每行结束后换行
        }
    }
登录后复制

二维矩阵90度顺时针旋转原理

将一个m行n列的矩阵originalMatrix进行90度顺时针旋转,会得到一个n行m列的新矩阵rotatedMatrix。

SEEK.ai
SEEK.ai

AI驱动的智能数据解决方案,询问您的任何数据并立即获得答案

SEEK.ai 100
查看详情 SEEK.ai

其核心映射关系如下: 如果原始矩阵中的元素位于 (i, j)(即第 i 行,第 j 列),那么在旋转后的矩阵中,它将移动到 (j, m - 1 - i)。

  • i 是原始矩阵的行索引,范围从 0 到 m-1。
  • j 是原始矩阵的列索引,范围从 0 到 n-1。
  • m 是原始矩阵的总行数。

因此,originalMatrix[i][j] 会被放置到 rotatedMatrix[j][m - 1 - i]。

由于旋转后的矩阵维度发生了变化(从m x n变为n x m),我们通常需要创建一个新的辅助矩阵来存储旋转结果,而不是在原地进行旋转(原地旋转对于方阵来说是可能的,但对于非方阵则更为复杂且不直观)。

实现矩阵90度顺时针旋转

根据上述原理,我们可以编写一个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();
    }
}
登录后复制

代码解析:

  1. rotateMatrix90DegreesClockwise 方法接收一个int[][]类型的originalMatrix作为参数。
  2. 首先进行空值和维度检查,确保矩阵有效。
  3. 获取原始矩阵的行数m和列数n。
  4. 创建一个新的rotatedMatrix,其维度为n行m列,这是旋转后的正确尺寸。
  5. 使用两层嵌套循环遍历originalMatrix的每一个元素。
  6. 在循环内部,根据旋转原理 rotatedMatrix[j][m - 1 - i] = originalMatrix[i][j] 将原始元素放置到新矩阵的相应位置。
  7. 最后返回rotatedMatrix。

注意事项与最佳实践

  • 避免硬编码尺寸: 原始问题中的static int M = 4;会导致旋转逻辑只能用于特定大小的矩阵。在实际开发中,应始终使用matrix.length和matrix[0].length来动态获取矩阵的尺寸。
  • 非方阵的处理: 上述旋转算法能够正确处理任何m x n的矩阵,包括方阵和非方阵。旋转后,矩阵的行数和列数会互换。
  • 空间复杂度: 这种使用辅助矩阵的旋转方法,其空间复杂度为O(m*n),因为需要创建一个与原始矩阵大小相近的新矩阵。对于某些内存受限的场景,可能需要考虑原地旋转算法(但通常仅限于方阵)。
  • 时间复杂度: 遍历所有元素一次进行复制和转换,时间复杂度为O(m*n)。
  • 输入验证: 在实际应用中,应增加对用户输入行数和列数的验证,例如确保它们是正整数,以避免创建零维或负维度的数组导致程序崩溃。
  • 错误处理: 对于rotateMatrix90DegreesClockwise方法,如果传入null或空矩阵,应该有适当的错误处理或返回机制。

总结

本教程详细介绍了如何在Java中处理二维数组的用户输入、显示以及90度顺时针旋转。通过理解矩阵旋转的数学映射关系,并结合动态尺寸处理和辅助矩阵的方法,我们可以实现一个健壮且通用的旋转功能。掌握这些基本操作对于进行更复杂的矩阵运算和图形处理至关重要。始终记住,良好的编程实践包括动态尺寸处理、清晰的逻辑和适当的错误处理。

以上就是Java二维数组用户输入与90度顺时针旋转教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号