2014-10-16 3 views
1

Этот код должен хранить целые числа в ArrayList и выйти, когда введен номер 42, но он не работает. Иногда цикл не останавливается, когда 42 подается, а иногда он не хранит все числа введены до 42.ArrayList со сканером не работает должным образом

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

+0

Конечно, я буду помнить об этом. Спасибо. – PankajKushwaha

ответ

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

Вы читаете два целых в каждом итерации, так что, возможно, вы читаете 42 внутри цикла, и поэтому вы не останавливаетесь, когда вы его читаете.

Попробуйте изменить его на:

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

Спасибо, есть ли другой способ, которым я могу выполнить задачу? Другого выхода я не вижу. – PankajKushwaha

+0

@PankajKushwaha Пробовал ли вы код, который я предложил в конце моего ответа? – Eran

+0

Спасибо, сэр, я вижу код сейчас. Обновлено и оно работает. У меня недостаточно кредитов для увеличения :( – PankajKushwaha

0

Эти три линии вызывают проблемы; Вы задаете пользовательский ввод дважды

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

Вы должны сохранить значение переменной, как этот

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

Хотелось бы надеяться, что помогает :)