这个程序没有给出编译错误,但是在进行字符输入时给出了运行时错误,如果有任何编译错误,我使用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);
}
}
答案 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”。