这个程序为什么越界了?哪里出问题了呢?

img

img


第一个图是代码,第二个图是报错。我不明白哪里溢出了。之前这种题C语言也是这么写的,为什么Java就溢出了。
求解答

这段代码中存在一些语法错误和逻辑问题。我来尝试修改一下:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[][] a = new int[N][N];
        int i, j;

        for (i = 0; i < N; i++) {
            for (j = 0; j < N; j++) {
                a[i][j] = sc.nextInt();
            }
        }

        int temp;
        for (i = 0; i < N; i++) {
            for (j = i; j < N; j++) {
                temp = a[i][j];
                a[i][j] = a[j][i];
                a[j][i] = temp;
            }
        }

        for (i = 0; i < N; i++) {
            for (j = 0; j < N; j++) {
                System.out.print(a[i][j] + " ");
            }
            System.out.println();
        }
    }
}

首先需要注意的是,Java 中的数组下标是从 0 开始计数的,因此在循环遍历数组时,下标的范围应该是 0 到 N-1,而不是 1 到 N。

其次,在将数组按列进行转置时,交换两个元素的值应该使用一个临时变量来存储,否则交换操作会出错。

最后,为了方便用户观察输出结果,我们应该使用 System.out.print 方法代替 System.out.println 方法,这样输出的两个元素之间就不会有换行符了。

以上是我对代码的修改建议,希望能够帮助到你。如果解决了,请采纳我,谢谢~

17行就越界了啊,这时候i和j都等于N
明显16-19行有问题啊,你要用循环对矩阵进行转置啊

int[][] a = new int [N][];
在
for (i = 0; i < N; i++) {
    a[i] = new int[N]; //加上
    for (j = ...)
    ...
}

index是从0开始的 你N是不是应该给3