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は説明します。このジャンク値を取得するのはなぜですか?エラーを修正する方法は?
問題は、 readInt
が期待どおりに動作しないことです。文字列を読み取って文字列を数値に変換するのではありません。入力を*bytesとして読み取ります:
4つの入力バイトを読み取り、int値を返します。読み取られる最初から4番目のバイトをa-dとします。返される値は次のとおりです。
(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))
このメソッドは、インターフェイスDataOutputのwriteIntメソッドによって書き込まれたバイトを読み取るのに適しています。
この場合、Windowsを使用していて、12
と入力してから入力すると、バイトは次のようになります。
49 * 2 ^ 24 + 50 * 2 ^ 16 + 13 * 2 ^ 8 + 10と計算すると、825363722が得られます。
入力を読み取る簡単な方法が必要な場合は、Scanner
をチェックアウトして、それが必要かどうかを確認してください。
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 によると
ただし、スキャナーを確認する必要があります。
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);
}
これを行うためのより良い方法は、Scanner
を使用することです
Scanner sc = new Scanner(System.in);
System.out.println("Enter your Age :\n");
int i=sc.nextInt();
System.out.println(i);