I am trying to get input from user using DataInputStream
. But this displays some junk integer value instead of the given value.
Here is the code:
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);
}
}
And the output is
Enter your Age :12
825363722
Why am I getting this junk value and how to correct the error?
The problem is that readInt
does not behave as you might expect. It is not reading a string and convert the string to a number; it reads the input as *bytes:
Reads four input bytes and returns an int value. Let a-d be the first through fourth bytes read. The value returned is:
(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))
This method is suitable for reading bytes written by the writeInt method of interface DataOutput.
In this case, if you are in Windows and input 12
then enter, the bytes are:
Do the math, 49 * 2 ^ 24 + 50 * 2 ^ 16 + 13 * 2 ^ 8 + 10 and you get 825363722.
If you want a simple method to read input, checkout Scanner
and see if it is what you need.