0

DataInputStream を使用して任意の値を入力しているときに、1 桁の数字を入力する場合は、Enter キーを 2 回押す必要があります...そして以下のコード スニペットで

public void print()
   {
       DataInputStream in = new DataInputStream(System.in);
       try
       {
           System.out.println("Enter a digit");
           int n=in.readInt();
           System.out.println(n);
        }
        .
        .
        .
        .

n の値を出力している間、通常、予期しない値が表示されます... BufferedReader を使用しても同じ問題は発生しません...

入力された値が 233 の場合、出力として 842216202 が表示されます... コードで考えられるエラーは何ですか... これについて助けが必要です...

4

2 に答える 2

4

DataInputStreamバイナリデータを読み取ります。入力すると、どちらが (ビッグエンディアンで)、どちらが(10 進形式)[2, 3, 3, \n]と等しくなります。[0x32, 0x33, 0x33, 0x0A]0x3233330A842216202

a に変更すると、Scannerテキストが読み取られ、文字を(たとえば)整数に変換するための説得力のあるメソッドがあります。例では a を使用していますScanner

Scanner in = new Scanner(System.in);
try {
    System.out.println("Enter a digit");
    int n = in.nextInt();
    System.out.println(n);
} ...
于 2012-07-22T07:15:17.527 に答える
0

DataInputStream の Javadoc によると、このreadInt()メソッドは基になる入力ストリームから正確に 4 バイトを読み取ります。入力した数値の長さが 4 バイト未満の場合 (1 桁の数値など)、4 バイトが読み取られるまで読み取りが続行されます。つまり、「Enter」キーを押したときに入力した改行文字が含まれ、Unicode でエンコードされた値が整数として解釈されます。これがおそらくエラーの原因です。

于 2012-07-22T07:15:39.863 に答える