2014-09-07 3 views
0

Мой код не работает, хотя я добавил часового. Он петляет вечно.Проблемы с сканером/входом?

boolean exit = true; 
    Scanner sc = new Scanner(System.in); 
    ArrayList<String> inputData = new ArrayList<String>(); 
    ArrayList<Integer> outputData = new ArrayList<Integer>(); 

    while(sc.hasNext() && exit) { 
     String aStr = sc.next(); 
     String sentinel = "0 0 0"; 
     if(aStr.equals(sentinel)){ 
      exit = false; 
      System.out.println("Failed"); 
     } 
     else{ 
      inputData.add(aStr); 
     } 
    } 

    sc.close(); 

В чем причина этого?

ответ

0

Проблема заключается в том, что next() использует пространство как разделитель, который «разрывает» вход 0 0 0 на 3 разных входа 0.

Заменить:

String aStr = sc.next(); 

с:

String aStr = sc.nextLine(); 

и:

 if(aStr.equals(sentinel)){ 
      exit = false; 
      System.out.println("Failed"); 
     } 

с:

 if(aStr.equals(sentinel)){ 
      System.out.println("Failed"); 
      break; 
     } 

Полный код:

Scanner sc = new Scanner(System.in); 
ArrayList<String> inputData = new ArrayList<String>(); 
while(sc.hasNext()) { 
    String aStr = sc.nextLine(); 
    String sentinel = "0 0 0"; 
    if(aStr.equals(sentinel)){ 
     System.out.println("Failed"); 
     break; 
    } 
    else{ 
     inputData.add(aStr); 
    } 
} 
System.out.println(Arrays.toString(inputData.toArray())); // for debug 
sc.close(); 
0

По умолчанию разделителем Scanner является пробел. Так что проблема там.

String aStr = sc.nextLine(); 

Это будет работать.

Вы также можете попробовать что-то как:

String address = System.console().readLine("Enter your Address: "); 

Это позволит вам читать всю строку. Надеюсь это поможет.