扫描仪对象保持期望输入

时间:2016-06-03 11:45:38

标签: java

我有以下代码,其中通过系统输入定义矩阵:

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个整数 - 我不知道为什么这会影响程序,因为我在达到该代码块之前关闭了输入流。

2 个答案:

答案 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...