这段代码中存在一些语法错误和逻辑问题。我来尝试修改一下:
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