【问题标题】:Why the Output is as it is in this Java Code?为什么输出与此 Java 代码中的输出相同?
【发布时间】:2025-12-08 21:20:03
【问题描述】:

以下代码:

public class StrangeClass {
    public static int[] alpha(int[] a) {
        int[] b = new int[a.length];
        for (int i = 0; i < a.length; i++)
            b[i] = a[a.length - 1 - i];
        return b;
    }

    public static void omega(int[] a) {
        for (int i = 0; i < a.length/2; i++) {
            int temp = a[i];
            a[i] = a[a.length - 1 - i];
            a[a.length - 1 - i] = temp;
        }
    }

    public static void main(String[] args) {
        int[][] matrix = { {1,2,3}, {4,5,6} };
        System.out.println(matrix.length);
        alpha(matrix[0]);
        omega(matrix[1]);
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++)
                System.out.print(matrix[i][j]);
            System.out.println();
        }

产生输出:

2
123
654

我想知道输出是如何到达的。这里的输出是正确的,我只是不明白它是如何得到三行作为答案的概念。

【问题讨论】:

  • 调试它以更好地理解而不是搜索详细说明。
  • 你想输出 123 作为 321 吗?
  • 并且在发布之前格式化您的代码。并解释您希望看到的内容以及原因...
  • @user3747720 不啊哈输出是正确的,我只是不明白这些输出的概念是什么原因

标签: java arrays matrix


【解决方案1】:

alpha 方法返回一个反向排序的数组,而omega 方法直接将传入参数的数组反向。 因此,alpha(matrix[0]); 不会做任何您看不到的事情,而 omega(matrix[1]); 会更改矩阵第二行的顺序。 正如Shree Krishna所说,可以通过调试找到。

【讨论】:

    【解决方案2】:
        public class StrangeClass {
            public static int[] alpha(int[] a) {
                int[] b = new int[a.length];
                for (int i = 0; i < a.length; i++)
                    b[i] = a[a.length - 1 - i];
                return b;
            }
    
            public static void omega(int[] a) {
                for (int i = 0; i < a.length / 2; i++) {
                    int temp = a[i];
                    a[i] = a[a.length - 1 - i];
                    a[a.length - 1 - i] = temp;
                }
            }
    
            public static void main(String[] args) {
                int[][] matrix = { { 1, 2, 3 }, { 4, 5, 6 } };
                System.out.println(matrix.length); //Line a
                alpha(matrix[0]); //Line b
                omega(matrix[1]); //Line c
                for (int i = 0; i < 2; i++) { //Line d
                    for (int j = 0; j < 3; j++)
                        System.out.print(matrix[i][j]);
                    System.out.println();
                }
            }
        }
    

    a 行打印矩阵的长度,即两个数组元素 { 1, 2, 3 }{ 4, 5, 6 }

    行 b 通过引用传递{ 1, 2, 3 },但 alpha 内部的更改是对另一个数组 b 进行的。所以数组{ 1, 2, 3 } 保持不变。

    c 行通过引用传递{ 4, 5, 6 },并且对同一数组进行了更改。由于它是通过引用传递的(默认情况下在 java 中),因此值被反转(alpha 和 omega 正在反转数组的值)

    第 d 行负责打印矩阵数组,其中 { 1, 2, 3 } 保持不变,传递给 alpha,{ 4, 5, 6 } 更改,传递给 omega。

    【讨论】:

      【解决方案3】:

      1) matrix 是一个由 2 个数组组成的数组,每个数组有 3 个 int 值

      2)方法alpha返回一个新的int值数组,以倒序的值作为输入数组

      3) 方法omega 反转输入数组的值

      【讨论】:

        【解决方案4】:

        数组作为引用传递。

        omega 反转数组,因为操作发生在数组 a[] 本身(作为参数传递的数组)上,而 alpha 方法在 b[] 中创建了一个反转数组(不是传递的数组)并返回它。

        【讨论】:

          最近更新 更多