我有以下代码,其中通过系统输入定义矩阵:
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//define size of matrix
int size = in.nextInt();
int primeSum = 0;
int secSum = 0;
int[] matrix = new int[size*size];
//create matrix
for (int i=0; i<size*size;i++) {
matrix[i] = in.nextInt();
}
in.close();
//sum primary diagonal
for (int i=0; i < size*size;i += (size + 1)) {
primeSum = primeSum + matrix[i];
}
////sum secondary diagonal
// for (int i=(size - 1); i < size*size; i += (size - 2)) {
// secSum = secSum + matrix[i];
// }
System.out.println(Math.abs(secSum - primeSum));
}
}
上面的代码的工作原理是它允许用户通过输入N作为大小来定义NxN矩阵 - 因此在大小= 2的情况下,用户将定义4个矩阵元素。然而,在回溯到辅助对角线的代码之后,扫描器对象一直期望输入超过4个整数 - 我不知道为什么这会影响程序,因为我在达到该代码块之前关闭了输入流。
答案 0 :(得分:1)
你的这部分代码:
for (int i=0; i<size*size;i++) {
matrix[i] = in.nextInt();
}
只要数组被填满,就会调用需要输入的方法nextInt
。
答案 1 :(得分:1)
你写了一个潜在的无限循环。即如果尺寸不大于2,则i
将倒计时或保持0
。你应该覆盖这些角落案例,然后你的代码就可以了。
据我所见,你在一维上模拟一个二维数组。这是很难理解和容易搞砸的事情。你最好使用二维数组和一些嵌套循环:
int[][] matrix = new int[size][size];
//create matrix
for (int i=0; i<size; i++) {
for (int j=0; j<size; j++) {
matrix[i][j] = in.nextInt();
}
}
// and so on...