簡體   English   中英

緩沖讀取器字符輸入不工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM