缓冲的读者字符输入不适合

时间:2015-09-18 13:42:57

标签: java bufferedreader

这个程序没有给出编译错误,但是在进行字符输入时给出了运行时错误,如果有任何编译错误,我使用BlueJ(我知道它很糟糕,但学校也是如此......)

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);
    }
}

3 个答案:

答案 0 :(得分:0)

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

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

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

然后上面一行读取了最后一个字符后面的其余部分:' A'。由于A'之间没有更多的特征。并且行的结尾,readLine()返回一个空字符串,您尝试解析为Double,因此异常。

答案 1 :(得分:0)

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

我找到的解决方案是:

最后阅读char。看一下代码:

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);
    }
}

答案 2 :(得分:0)

这样做:读取字符后,尝试读取一行。

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

br.readLine();

作为readLine()方法读取一行文本。 一行被认为由换行符('\ n'),回车符('\ r')或回车符后立即换行符中的任何一个终止。

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

在这里,当我们在输入字符值后单击“输入”时,双精度变量尝试处理“ \ n”,这将导致“ NumberFormatException”。