System.out.println的未知输出

时间:2015-05-26 19:41:16

标签: java

我正在学习Java,在学习try catch循环时,我遇到了这种奇怪的行为。

无论我向下面的代码提供什么号码,它都会返回49-53之间的内容。

public class demo{
    public static void main(String[] args) {
        System.out.println("Enter a number");
        try{
            int num = System.in.read();
            System.out.println(num);
        }catch(Exception e){
            e.printStackTrace();
        }       
    }
}

3 个答案:

答案 0 :(得分:7)

您必须输入数字1-5。 read() method of InputStreamSystem.inInputStream)将字节值返回为int,但值为Unicode代码。字符'1''5'由代码49-53表示。事实上,'0''9'由代码48-57表示。

请勿直接在read上致电InputStream。它适用于低级流处理。而是将InputStream包裹在Scanner and call nextInt()

答案 1 :(得分:1)

InputStream.read()返回一个整数。你应该做char c =(char)myInt;如果你想要的话,把它转换成一个角色

答案 2 :(得分:0)

InputStream.read()只读取下一个数据字节:

http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()

如果您需要一次读取超过1个字节的数据,请尝试使用BufferedInputStream:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html或读者:https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

谨防简单地将InputStream.read生成的int转换为char - 只有在您的字符集为ISO-8859-1时才能生效。因此,具有适当Charset的Reader是一个不错的选择。