2016-07-18 8 views
1

大文字を小文字に変換するコードを書いています。逆も同様です。 breakを使用して、入力が'.'のときはいつでもループを終了できるようにしていますが、動作していないようです。何かアドバイスをいただければ幸いです!私はまた、ループが終了する前に繰り返されたすべての時間のカウントを作成したい。それについてどうすればいいのですか?入力用に特定の文字を受け取ったときにループを停止する

public static void main(String[] args) throws java.io.IOException { 

    char choice, ignore = 0; 
    for (; ;) { 
     do { 
      System.out.print("Please enter a upper or " + "lower case letter(. to quit)"); 
      choice = (char) System.in.read(); 
      if ((char) choice > 64) { 
       ignore = (char) (choice + 32); 
      } 
      if ((char) choice > 96) { 
       ignore = (char) (choice - 32); 
      } 
      System.out.print(ignore); 
      System.out.println("\n"); 
      if (choice == '.') { 
       break; 
      } 
      do { 
       ignore = (char) System.in.read(); 
      } while (ignore != '\n'); 
     } while ((char) choice > 64 | (char) choice < 123 | choice != '.'); 
    } 
} 
+3

'for(;;)'ループではなくdo-whileループを使用してください。 –

+1

あなたが壊れることを必要とする「無限ループ」を避けるために、ロジックをよりよく構成する必要があります。ループは条件付きで終了する必要があります –

+1

ネストループを使用しています。提案については、http://stackoverflow.com/q/886955/4793951を参照してください。 – Zircon

答えて

0

パーマネントforループ内にdo-whileループがあります。 breakステートメントはあなたをdo-whileループから壊してしまいますが、あなたはまだforループにいます。 do-whileループにもう一度入り、続行します。

1

問題はネストループです。

do { 
    //other code 
} while ((char) choice > 64 | (char) choice < 123 | choice != '.'); 

あなたはいくつかのオプションを持っていますが、おそらく最も簡単にはこのような何かにforループを変更するには、次のようになります:

while(choice != '.'){ 
    //do other code 
} 

これをbreakのみから脱出するので、あなたのfor (; ;)は終了されることはありませんbreakに達するとコードはdo whileを終了し、次のループでwhileを終了します。

このテクニックでは、choiceを値で初期化する必要があります。

0

whileループが壊れても、forループは永遠に実行され続けます。 1つの修正は、forループ内に終了条件を追加することです。

for (; choice != '.';) 

選択変数を初期化してください。そうしないと、コンパイル時にエラーが発生します。

0

stackoverflow.com/q/886955/4793951 ブレイクラベル ありがとう! @Zircon

関連する問題