【问题标题】:Buffered Reader Character Input Not WoringBufferedreader 字符输入不起作用
【发布时间】:2015-12-15 16:41:26
【问题描述】:

这个程序不会出现编译错误,但是在输入字符时会出现运行时错误,如果有任何编译错误,我会使用 BlueJ(我知道它很烂,但是 School 所以......)

import java.io.*;

class Buffered
{
    public static void reader() throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Please Enter Your Name");
        String s = br.readLine();

        System.out.println("Please Enter Your character");
        char y = (char)br.read();

        System.out.println("Please Enter Your double");
        double d = Double.parseDouble(br.readLine());

        System.out.println(y+s+d);
    }
}

【问题讨论】:

  • 什么是运行时错误?我不精通Java,但您可能需要将d 转换为println 上的字符串
  • java.lang.NumberFormatException;
  • 空字符串(in.sun.misc.FloatingDecimal)
  • 你也可以更正代码并发送,那将是 gr8
  • 请在此处查看答案:stackoverflow.com/a/21542133/902874

标签: java bufferedreader


【解决方案1】:
System.out.println("Please Enter Your character");
char y = (char)br.read();

因此,用户输入例如A,然后按回车键。上面这行代码只读取字符'A'。

System.out.println("Please Enter Your double");
double d = Double.parseDouble(br.readLine());

然后上面的行读取该行的其余部分,就在已读取的最后一个字符之后:'A'。由于 'A' 和行尾之间没有更多字符,readLine() 返回一个空字符串,您尝试将其解析为 Double,因此出现异常。

【讨论】:

  • 你在 char 之后读取行尾,然后读取下一行并将其解析为 double。
【解决方案2】:

运行代码时看起来有点乱,但正如 JB Nizet 所说:read() 仅读取第一个字符,readLine() 正在尝试读取该行的其余部分为空。

我找到的解决方案是:

最后读取字符。看代码:

import java.io.*;

class Buffered {
    public static void main(String args[]) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Please Enter Your Name");
        String s = br.readLine();

        System.out.println("Please Enter Your double");
        String g = br.readLine();
        double d = 0;
        try {
            d = Double.parseDouble(g);
        } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
        }

        System.out.println("Please Enter Your character");
        char y = (char)br.read();

        System.out.println(y+s+d);
    }
}

【讨论】:

    【解决方案3】:

    这样可以:读取一个字符后,尝试读取一行。

    char c = (char)br.read();

    br.readLine();

    作为 readLine() 方法读取一行文本。 行被视为由换行符 ('\n')、回车符 ('\r') 或回车符后紧跟换行符中的任何一种来终止。

    但是 read() 方法从这个缓冲读取器中读取单个字符并将其作为整数值返回。

    这里,当我们输入一个字符值后点击“回车”,double变量尝试处理“\n”,导致“NumberFormatException”。

    【讨论】:

    • 你能解释一下你为什么这样做吗?
    猜你喜欢
    • 2019-02-17
    • 2016-10-17
    • 1970-01-01
    • 2015-07-07
    • 2013-05-11
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多