ArrayList与扫描仪无法正常工作

时间:2014-10-16 19:10:45

标签: java arraylist collections java.util.scanner

此代码应该在ArrayList中存储整数并在输入数字42时退出,但它不起作用。有时循环不会在提供42时停止,有时它不会存储在42之前输入的所有数字。

import java.util.*;
class test{    
    public static void main(String[] args){    
        ArrayList<Integer> ar = new ArrayList<Integer>();
        Scanner sc = new Scanner(System.in);
        while(sc.nextInt() != 42){
            ar.add(sc.nextInt());
        }    
        for(int i : ar){
            System.out.println(i);    
        }    
    }
}

输出:

C:\Users\pj\Desktop\j2\new>java test
1
2
3
5
42
2
5

2 个答案:

答案 0 :(得分:4)

while(sc.nextInt() != 42){
    ar.add(sc.nextInt());
}

你在每次迭代中读取两个整数,所以你可能正在循环中读取42,因此当你阅读它时你不会停止。

尝试将其更改为:

int i = 0;
while((i = sc.nextInt()) != 42){
    ar.add(i);
}

答案 1 :(得分:0)

这三行引起了问题;你要求用户输入两次

while(sc.nextInt() != 42){
    ar.add(sc.nextInt());
}

您应该将值存储到变量中,例如

int n = sc.nextInt();
while (n != 42) {
    ar.add(n);
    n = sc.nextInt();
}

希望这有助于:)