1

次のコードに問題があります。

public class DWDemo {
  public static void main(String[] args) throws java.io.IOException {
    char ch;

    do {
      System.out.print("Press a key followed by enter: ");
      ch = (char) System.in.read(); // get the char
    } while (ch != 'q');
  }
}

何らかの理由で System.out 行が 3 回繰り返されます。コンソールからの出力例は次のとおりです。

Press a key followed by enter: a
Press a key followed by enter: Press a key followed by enter: Press a key followed by enter: 

このコードを Eclipse Kepler と手動コンパイルの両方で試しましたが、同じ問題がありました。答えをグーグルで調べることは無益であることが証明されています。何かご意見は?

正しいコードを追加

複数の文字を入力すると、4 つの System.out.println の結果が得られます。

Press a key followed by enter: aa 
Press a key followed by enter: Press a key followed by enter: Press a key followed by     enter: Press a key followed by enter: 
4

2 に答える 2

7

つまり、a を押してエンターを押します。次に、これらの文字を読み取ります

  • 文字「あ」
  • 文字「\r」
  • 文字「\n」

(これは Windows に適用されます。たとえば *nix システムでは、改行は \r\n ではなく単に '\n' になります)

たとえば、すべての空白をスキップできます。

 do {
   System.out.print("Press a key followed by enter: ");
    ch = (char) System.in.read(); 
    while(Character.isWhitespace(ch)) {
        ch = (char) System.in.read(); 
    }
} while (ch != 'q');
于 2013-08-27T21:27:25.567 に答える
2

Enter キーを押すと、Windowsベースのシステム (\r\n) では余分な 2 文字が読み取られます。

コードを次のように変更した場合:

    do {
        System.out.print("Press a key followed by enter: ");
        ch = (char) System.in.read(); // get the char
        char ch1 = (char) System.in.read(); // carriage return
        char ch2 = (char) System.in.read(); // line feed
    } while (ch != 'q');

単一の「キーを押してから入力してください:」と出力します。

相互検証したい場合は、 と の int 値を出力するch1と、それぞれch2と が得られます。1310

于 2013-08-27T21:29:32.660 に答える