2016-11-08 6 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."); 
    } 
} 

、ユーザによって与えられた最初の部屋番号が有効であれば、コードは動作します。しかし、ユーザーが無効な部屋番号を入力した場合、ループは停止しません。すなわち、部屋番号が無効であり、部屋番号が有効であっても何度も何度も部屋番号を尋ねます。私が考えているのは、入れ子のwhileループのhasNext()が再起動せず、ファイルの先頭に戻るため、より大きな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ステートメントを意味しますか?なぜなら、ループが内側のループの外側にあるべきだと思っていたので、ループがテキストファイルの各行を通過してから、部屋番号が無効かどうかを調べることができます。また、正確にどこにブレークを入れますか?内側は内側にありループは十分ですか? – 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

関連する問題