2017-11-21 6 views
-1

私はいつかこれで立ち往生し、誰かが私を導くことができるかどうか疑問に思っていました。 私はユーザーに文字を入力させようとしていますが、それがスイッチケースの1つと一致しない場合は、ユーザーに依頼し続ける必要があります。私のコードはその部分をうまく処理します。この問題は、ユーザーが正しい文字を入力しようとしたときに発生し、コードが特定のケースではなくデフォルトを出力し続ける場合に発生します。 ご協力いただければ幸いです! はユーザーが正しい文字を入力してもループし続けます

while(!flag){ 
      switch (endChar) { 
       case 'T': 
       case 't': 
        modFlags[0] = true; 
        flag = true; 
        break; 
      case 'P': 
      case 'p': 
       modFlags[1] = true; 
       flag = true; 
       break; 

      case 'W': 
      case 'w': 
       modFlags[2] = true; 
       flag = true; 
       break; 

      case 'L': 
      case 'l': 
       modFlags[3] = true; 
       flag = true; 
       break; 

      case 'I': 
       System.out.print("sd"); 
       fileName = updateFileName(sc, fileName); 
       flag = true; 
       break; 
      case 'i': 
       fileName = updateFileName(sc, fileName); 
       flag = true; 
       break; 

      case 'O': 
      case 'o': 
       break; 

      case 'D': 
      case 'd': 
       break; 

      case 'M': 
      case 'm': 
       modeBoth = true; 
       flag = true; 
       break; 

      case 'H': 
      case 'h': 
       showMenu = false; 
       flag = true; 
       break; 

      default: 
       System.out.println("Unknown Option."); 
       System.out.print("Enter action: "); 
       sc.next(); 
       break; 
       // flag = false; 
     } 

    } 
+1

'endChar'はどこで更新しますか?ループを通過するたびに更新する必要があります。あなたは今、それを逃しています。 –

+0

別のメソッド(promptMenu)から単一の文字が返され、endCharに割り当てられます。 endCharを更新していないことがわかっているので、同じ文字をもう一度印刷し続けますが、promptMenuメソッドを使わずにendCharを更新する方法がわかりません – JRob

答えて

1

あなたは、私はあなたのwhileループの冒頭にだけcontinue;を使用して、switch文のデフォルトの場合の値の部分はにあなたを戻すためにスキャンを移動することをお勧めして何に基づいてありがとうwhileループの始まり。そうすれば、コードをもう一度入力することなく、入力から別の値を読み取ることができます。スイッチの下の方に

sc.next(); 

while(!flag){ 
     System.out.print("Enter action: "); 
     endChar = sc.next().charAt(0); 
     switch (endChar) { 
     case 'T': 
     case 't': 
      modFlags[0] = true; 
      flag = true; 
      break; 
     case 'P': 
     case 'p': 
      modFlags[1] = true; 
      flag = true; 
      break; 

     case 'W': 
     case 'w': 
      modFlags[2] = true; 
      flag = true; 
      break; 

     case 'L': 
     case 'l': 
      modFlags[3] = true; 
      flag = true; 
      break; 

     case 'I': 
      System.out.print("sd"); 
      fileName = updateFileName(sc, fileName); 
      flag = true; 
      break; 
     case 'i': 
      fileName = updateFileName(sc, fileName); 
      flag = true; 
      break; 

     case 'O': 
     case 'o': 
      break; 

     case 'D': 
     case 'd': 
      break; 

     case 'M': 
     case 'm': 
      modeBoth = true; 
      flag = true; 
      break; 

     case 'H': 
     case 'h': 
      showMenu = false; 
      flag = true; 
      break; 

     default: 
      continue; 
    } 

} 
+1

私はちょうどコメントの途中でしたこれを修正するために編集したとき、何が間違っていたかを教えてください。良い答え、私のupvoteの価値がある。 –

+0

ええ、私はコードを貼り付けていたので、気づいた、ありがとう。 OPは、元々スキャナからの入力を傍注として呼び出した場所であればどこでも削除することができます。 – Mark

1

変更あなたが現在やっているすべてはScannerからStringを取得し、それに何もしていませんので、

endChar = sc.next().charAt(0); 

へ。ループの次の繰り返しで、 endCharの値を異なる値にする場合は、 Stringの文字を endCharに割り当てる必要があります。

関連する問題