web-dev-qa-db-ja.com

JavaのDataInputStreamで整数のユーザー入力を読み取りますか?

DataInputStreamを使用してユーザーから入力を取得しようとしています。しかし、これは与えられた値の代わりにいくつかのジャンク整数値を表示します

私のコードは:

import Java.io.*;
public class Sequence {
    public static void main(String[] args) throws IOException {
    DataInputStream dis = new DataInputStream(System.in);
    String str="Enter your Age :";
    System.out.print(str);
    int i=dis.readInt();
    System.out.println((int)i);
    }
}

そして出力は

あなたの年齢を入力してください:12

825363722

Plsは説明します。このジャンク値を取得するのはなぜですか?エラーを修正する方法は?

7
harvish

問題は、 readInt が期待どおりに動作しないことです。文字列を読み取って文字列を数値に変換するのではありません。入力を*bytesとして読み取ります:

4つの入力バイトを読み取り、int値を返します。読み取られる最初から4番目のバイトをa-dとします。返される値は次のとおりです。

(((a & 0xff) << 24) | ((b & 0xff) << 16) |  
((c & 0xff) << 8) | (d & 0xff))

このメソッドは、インターフェイスDataOutputのwriteIntメソッドによって書き込まれたバイトを読み取るのに適しています。

この場合、Windowsを使用していて、12と入力してから入力すると、バイトは次のようになります。

  • 49-「1」
  • 50-「2」
  • 13-キャリッジリターン
  • 10-改行

49 * 2 ^ 24 + 50 * 2 ^ 16 + 13 * 2 ^ 8 + 10と計算すると、825363722が得られます。

入力を読み取る簡単な方法が必要な場合は、Scannerをチェックアウトして、それが必要かどうかを確認してください。

19
zw324

DataInputStreamからデータを取得するには、次の手順を実行する必要があります-

_        DataInputStream dis = new DataInputStream(System.in);
        StringBuffer inputLine = new StringBuffer();
        String tmp; 
        while ((tmp = dis.readLine()) != null) {
            inputLine.append(tmp);
            System.out.println(tmp);
        }
        dis.close();
_

readInt()メソッドは、この入力ストリームの次の4バイトを返し、intとして解釈されます。 Java docs によると

ただし、スキャナーを確認する必要があります。

1
JHS
public static void main(String[] args) throws IOException {
DataInputStream dis = new DataInputStream(System.in);
String str="Enter your Age :";
System.out.print(str);
int i=Integer.parseInt(dis.readLine());
System.out.println((int)i);
}
0

これを行うためのより良い方法は、Scannerを使用することです

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter your Age :\n");
    int i=sc.nextInt();
    System.out.println(i);