Java 输入流读取器-读取方法返回错误值

Java 输入流读取器-读取方法返回错误值,java,inputstream,bufferedreader,Java,Inputstream,Bufferedreader,这可能听起来很简单,或者是一个老问题,但对我来说完全不同。 我已经写了一个半下降金字塔模式的程序,就像这样 一, 1 2 1 2 3 1234 123445 我知道这很容易,诀窍是我不想使用Scanner和Integer.parseInt()。我正试图用BufferedReader和InputStreamReader来实现这一点。 因此,当我用num中的5输入执行main方法的以下代码时,当我打印它时,它将其读取为53。我不知道为什么会这样。但是当我使用“Integer.parseInt(br.

这可能听起来很简单,或者是一个老问题,但对我来说完全不同。 我已经写了一个半下降金字塔模式的程序,就像这样

一,

1 2

1 2 3

1234

123445

我知道这很容易,诀窍是我不想使用
Scanner
Integer.parseInt()。我正试图用
BufferedReader
InputStreamReader
来实现这一点。 因此,当我用num中的5输入执行main方法的以下代码时,当我打印它时,它将其读取为53。我不知道为什么会这样。但是当我使用“Integer.parseInt(br.readLine())”方法时,它给出了精确的输出。当read方法应该读取int值时,应该如何发生呢。请把它清理干净

    int num1;   
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter hte value of num1");
    //num1=Integer.parseInt(br.readLine());
    num1=br.read();
    System.out.println(num1);
    for(int i=0;i<num1;i++)
    {
        for(int j=0;j<=i;j++)
        {
            System.out.print(j+"\t");

        }
        System.out.println();
    }
intnum1;
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“输入num1的值”);
//num1=Integer.parseInt(br.readLine());
num1=br.read();
系统输出打印项次(num1);
对于(int i=0;i
当我打印它时,它读作53

是的,它会。因为您正在调用
read()
,它返回一个字符,或者-1表示数据结束

字符“5”的Unicode值为53,这就是您看到的。(毕竟,您的变量是
int
。)如果将
num1
强制转换为
char
,您将看到“5”


当您想要将整数的文本表示形式转换为整数值时,通常会使用诸如
integer的代码。parseInt

Bufferreader将读取unicode值,您需要使用以下命令将其转换为整数:

整数.parseInt(num1) 或
字符。getNumericValue(num1)

53是“5”的ASCII码,请将ASCII码转换为正确的字符串。

天哪,jon skeet..我听说过很多关于你的事,也读了太多关于你的漂亮而令人惊讶的答案。再次感谢你给出的清晰而简短的答复。因此,我只想再次确认一下,现在只有一种方法可以通过使用Integer.parseInt(readLine())实现这一点?@user2194800:嗯,这取决于你想做什么。如果你真的只想读一个字符,你可以使用
read()
,然后可能使用
character.digit
。但是这样就不能处理像“10”这样的值了…我很抱歉,我没有资格对答案进行投票。当我获得了这样做的声誉时,我肯定会这么做。:@user2194800:你可能无法投票,但你可以通过点击分数下面的勾选框来接受答案。(这并不是说你一定要接受我的回答,但你会这么做:)是的,我会毫不犹豫地这么做。但根据堆栈规则,我在接下来的2分钟内不能再这样做了(谢谢你的帮助…我现在知道了谢谢你的帮助…我现在知道了不是什么大不了的事,但这可能有助于展示你的成果。