2016-04-07 2 views
0

Код не работает должным образом. Консоль продолжает запрашивать значения и никогда не останавливается.Программа ArrayList не работает по желанию

package com.java.collections; 

import java.util.*; 

public class ArrayList_2 { 

    public static void main(String[] args) { 

     ArrayList<String> arrayList = new ArrayList<String>(); 
     readList(arrayList); 
     displayList(arrayList); 
    } 

    private static void displayList(ArrayList<String> arrayList) { 

     for(int i=0;i<arrayList.size();i++){ 
      System.out.println(arrayList.get(i)); 
     } 

    } 

    private static ArrayList<String> readList(ArrayList<String> list) { 

     @SuppressWarnings("resource") 

     Scanner obj = new Scanner(System.in); 

     while(obj.hasNext()){ 
      String item = obj.next(); 
      list.add(item); 
     } 
     return list; 
    } 

} 

ответ

0

Я хотел бы изменить свой while цикл в методе readList, как это:

Scanner obj = new Scanner(System.in); 

String item = ""; 

//*priming read* 
item = obj.nextLine(); 

while(!item.equals("-0")) 
{ 
    list.add(item); 

    //*update read* 
    item = obj.nextLine(); 
} //end while 

Таким образом, цикл проверки для значения дозорного, который будет содержаться в item.

+0

Постарайтесь точно. Но я не понимаю, почему мой код не работает. –

+0

Позвольте мне лучше пояснить, 'hasNext' возвращает true, если в вашем случае у сканера' obj' есть еще один токен. Поэтому даже ввод ничего, кроме пустой строки, вернет true. В вашей петле нет значения дозорного значения, чтобы остановить цикл. В моем коде я представил один, '-0'. – Logan

+0

Не мог заставить его работать. Я понял, что ты сказал. Большое спасибо! Есть ли другой способ закодировать это право? Пожалуйста помоги. –

0

Ваш код не работает, потому что он застревает в цикле while. У вас нет условия перерыва. Попробуйте заменить его на этот:

while (obj.hasNext()) { 
     String item = obj.next(); 
     if (item.equals("stop")) { 
      break; 
     } 
     // otherwise do stuff here... 
    } 
    obj.close(); 

Когда вы входите в «стоп», цикл будет завершен. Не забудьте закрыть экземпляр сканера.

+0

Спасибо, у меня появилась идея! –

+0

ли метод hasNext() возвращает true, когда я ничего не вводил и не нажимаю Enter? –

+0

Почему бы вам просто не проверить его? Просто добавьте в свой цикл следующее: System.out.println ("hasNext() был true."); – Exlll

0

Ваша программа не останавливается и продолжает запрашивать больше значений, потому что нет кода, который говорит программе останавливаться :).

Вы можете добавить какое-либо условие, которое сообщает коду прекратить прием ввода, например. когда пользователь ввел 5 слов, как указано ниже (см. прокомментированные строки):

private static void readList(ArrayList<String> list) { 

    @SuppressWarnings("resource") 
    int start = 1; // start count 
    int end = 5; // end count 
    Scanner obj = new Scanner(System.in); 

    while(obj.hasNext() && start<=end){ // <- Note the condition! 
     String item = obj.next(); 
     list.add(item); 
     start++; // Keep a count. 
    } 

} 
+0

Спасибо, у меня появилась идея! –

+0

ли метод hasNext() возвращает true, когда я ничего не вводил и не входил? –

+0

Я верю, что он вернется, так как вы все еще вводите пустой ввод. Вы можете отладить свой код и проверить документацию, чтобы проверить это. – rgamber

Смежные вопросы