I don't know of a typical read(int) method. Reader has read(), which reads a character and returns its integer value, and InputStream() has read(), which does the same for a byte. If you are using one of those, the "absurd value" you see is probably the ASCII value of the character for the digit. 48 for 0, 49 for 1, etc. You will need to convert from the ASCII value to the integer value. Also, if you ever need to convert a multiple digit number to an integer, take a look at the Java API Scanner class.