[英]Buffered Reader Character Input Not Woring
這個程序沒有給出編譯錯誤,但是在輸入字符時給出了一個運行時錯誤,如果有任何編譯錯誤,我使用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);
}
}
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,因此出現異常。
運行代碼時看起來有點混亂,但是正如 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);
}
}
這將做: 讀完一個字符后,試着讀一行。
char c = (char)br.read();
br.readLine();
作為 readLine() 方法讀取一行文本。 一行被視為以換行符 ('\\n')、回車符 ('\\r') 或回車符后緊跟換行符中的任何一個結束。
但是 read() 方法從此緩沖讀取器讀取單個字符並將其作為整數值返回。
這里,當我們在輸入字符值后點擊“回車”時,double 變量嘗試處理“\\n”,導致“NumberFormatException”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.