2014-10-16 70 views
1

此代码应该在ArrayList中存储整数,并在输入数字42时退出,但它不起作用。有时循环不停止42时提供,有时不存储输入所有数字之前42ArrayList与扫描仪无法正常工作

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 
+0

它总是更好(对我来说)存储' nextSomething'处理它之前的对象。 – seteropere 2014-10-16 19:40:22

+0

当然,我会牢记这一点。谢谢。 – PankajKushwaha 2014-10-16 19:56:58

回答

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

您在阅读每两个整数迭代,所以有可能你正在读循环内的42个,因此当你读它时你不会停下来。

尝试将其更改为:

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

谢谢,有没有其他办法可以完成任务?我没有看到其他出路。 – PankajKushwaha 2014-10-16 19:17:25

+0

@PankajKushwaha您是否尝试过我在我的回答结尾处建议的代码? – Eran 2014-10-16 19:18:15

+0

非常感谢先生,我现在看到了代码。更新和它working.I没有足够的积分upvote :( – PankajKushwaha 2014-10-16 19:22:48

0

这三行引起的问题;你问用户输入两次

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

你应该值存储到一个变量,像这样

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

希望帮助:)