程序在while循环后停止

时间:2015-12-11 14:53:21

标签: java arrays

我正在编写一个小程序,它读取输入并设置数组大小,填充数组并添加数字。我的问题是,虽然我没有收到任何错误,但程序会在一段时间后停止。任何关于我做错的指示都将非常感激。

public class test {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int[] numbers = new int[in.nextInt()];
        int sum = 0;
        System.out.println("\n" + "numbers: " + numbers.length);

        while (in.hasNextLine()) {

            for (int i = 0; i < numbers.length; i++) {
                numbers[i] = in.nextInt();
                // System.out.println(numbers[i]);
            }
        }
        for (int i = 0; i <= numbers.length; i++) {
            sum += numbers[i];

        }
        System.out.println(sum);

    }

}

4 个答案:

答案 0 :(得分:3)

由于Scanner.hashNextLine()的JavaDoc声明:

  

如果此扫描仪的输入中有另一行,则返回true。     此方法可能会在等待输入时阻止。扫描仪不会     超越任何输入。

所以你的while循环永远不会完成:

while (in.hasNextLine())

只需删除此循环,你的for循环内部已经做了正确的工作。

PS:正如jipr311所说,修复你的第二个for循环,否则你将面临ArrayIndexOutOfBoundsException

for (int i = 0; i < numbers.length; i++) {
    sum += numbers[i];
}

答案 1 :(得分:2)

没有使用while循环。删除它。 并像

一样编辑for循环

for (int i = 0; i < numbers.length; i++)

答案 2 :(得分:2)

这应该有效:

public static void main(String[] args) {

        Scanner in = null;
        try{
            in = new Scanner(System.in);
            int[] numbers = new int[in.nextInt()];
            int sum = 0;
            System.out.println("\n" + "numbers: " + numbers.length);
            int count = 0;
            while (count < numbers.length) {
                numbers[count] = in.nextInt();
                count++;
            }
            for (int i = 0; i < numbers.length; i++) {
                sum += numbers[i];

            }
            System.out.println(sum);
        }finally{
            if(null != in){
                in.close();
            }
        }

    }

由于扫描仪对象未关闭,程序中也存在资源泄漏。我纠正了它。

答案 3 :(得分:2)

不需要while循环

            for (int i = 0; i < numbers.length; i++) {
                if(in.hasNextInt())
                numbers[i] = in.nextInt();
                // System.out.println(numbers[i]);
            }