2016-11-08 2 views
0

У меня есть текстовый файл со всеми номерами номеров в моей школе. Затем у меня есть код, который запрашивает номер комнаты ученика. kb - пользовательский входной сканер, а roomnos - сканер текстовых файлов. Это код:Проверка ошибки ввода пользователя с использованием текстового файла в Java

String room = null; 
boolean invalid = true; 
while(invalid) 
{ 
    System.out.println("What is the room number of your class?"); 
    room = kb.nextLine(); 
    while(roomnos.hasNext()) 
    { 
     String roomno = roomnos.nextLine(); 
     if(room.equals(roomno)) 
      invalid = false; 
    } 
    if(invalid == true) 
    { 
     System.out.println("The room number you've given is invalid."); 
    } 
} 

Код действует, если номер первой комнаты указан пользователем. Однако, если пользователь вводит недопустимый номер комнаты, цикл не останавливается, то есть он говорит, что номер комнаты недействителен и запрашивает номер комнаты снова и снова, даже если номер комнаты действителен. Я думаю, что hasNext() во вложенном цикле while не перезапускается и не возвращается к началу файла и, следовательно, не может найти номер комнаты во время следующих циклов цикла while. Какова бы ни была проблема, как я могу это исправить?

ответ

0

Итак, я понял это сам. Проблема была в том, что я думал, что сканер файла с номерами комнат не перезапускался, поэтому внутренний цикл while не работал, если первый вход пользователя был недействительным. Следующий код исправил проблему:

String room = null; 
boolean invalid = true; 
while(invalid) 
{ 
    System.out.println("What is the room number of your class?"); 
    room = kb.nextLine(); 
    roomnos = new Scanner(new File("/*file location*/")); 
    while(roomnos.hasNext()) 
    { 
     String roomno = roomnos.nextLine(); 
     if(room.equals(roomno)) 
      invalid = false; 
    } 
    if(invalid == true) 
    { 
     System.out.println("The room number you've given is invalid."); 
    } 
    roomnos.close(); 
} 
0

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

+0

Извините, я не совсем понимаю. По проверке вы имеете в виду оператор if, который проверяет логическое значение «invalid» и печатает, что номер комнаты недействителен? Потому что я думал, что он должен находиться за пределами внутреннего цикла while, чтобы цикл мог проходить через каждую строку текстового файла, прежде чем видеть, является ли номер комнаты недействительным. Кроме того, где именно я помещаю перерыв? Достаточно ли внутри внутренней петли? – Ranjani

0

Я бы изменил код таким образом, добавив значение, которое означает, сколько строк вы можете получить.

String room = null; 
boolean invalid = true; 
int maxline = 100;//i suppose 

while(invalid) 
{ 
    int lineCounter=0; 
    System.out.println("What is the room number of your class?"); 
    room = kb.nextLine(); 
    while(roomnos.hasNext()) 
    { 
     lineCounter++; 
     String roomno = roomnos.nextLine(); 
     if(room.equals(roomno)) 
      invalid = false; 
     if(lineCounter>maxline) 
      break; 
    } 
    if(invalid == true) 
    { 
     System.out.println("The room number you've given is invalid."); 
    } 
} 

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

+0

По-прежнему не работает. :( – Ranjani

+0

попробуйте отладить или, по крайней мере, использовать некоторую «System.out.print», чтобы увидеть значение переменных в определенных точках, чтобы вы могли получить ошибку – RudiDudi

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