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

4
这可能听起来很容易或者是一个老掉牙的问题,但对我来说却不同。 我编写了一个程序来生成半降序金字塔模式,如下所示。
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
我知道这很简单,但诀窍在于我不想使用ScannerInteger.parseInt()来完成。我正在试图使用BufferedReaderInputStreamReader来实现。 因此,当我执行以下代码并输入5时,它以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();
    }

这是我的第一个问题,请忽略愚蠢的错误,我已经尽力写得尽可能好。

谢谢。

不是什么大问题,但展示一下你的输出可能会有所帮助。 - Jess
3个回答

7
当你打印它时,read()会将其读作53。这是因为read()返回单个字符或-1表示数据结束。字符'5'的Unicode值为53,所以你看到的就是这样。毕竟,你的变量是一个int。如果你将num1转换为char,你将看到'5'而不是53。当你想要将整数的文本表示形式转换为整数值时,通常会使用Integer.parseInt等代码。

1
哇,Jon Skeet.. 我听说过你很多次,也读了很多你美丽而惊人的答案。再次感谢您提供清晰简洁的回复。所以我只想再次确认,现在只有使用 Integer.parseInt(readLine()) 这种方式来完成这个任务了吗? - AJ027
@user2194800:嗯,这取决于你想要做什么。如果你只想读取一个字符,你可以使用 read() ,然后再使用 Character.digit。但是那样就无法处理像"10"这样的值了... - Jon Skeet
抱歉,我没有资格为答案点赞。当我有足够的声望时,我一定会这样做的。 :) - AJ027
@user2194800:你可能无法点赞,但是你可以通过点击得分下方的复选框来接受答案。(这并不意味着你一定要接受我的答案,但这就是你应该做的方式 :) - Jon Skeet
是的,我一定会做到。但是根据堆栈规则,我需要再等2分钟才能这样做。 :( - AJ027

1

BufferedReader将读取Unicode值,您需要使用以下方法将其转换为int:

Integer.parseInt(num1) 或者 Character.getNumericValue(num1)


1

53是ASCII码中的'5',将ASCII码转换为正确的字符串进行打印。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接