簡體   English   中英

為什么通過bufferedreader接收輸入會在系統中拋出垃圾值?

[英]why does taking input through bufferedreader throw a garbage value in my system?

public static void main(String[] args) throws Exception {
    BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));
    int a = inp.read();
    System.out.println(a);
    inp.close();
}

安慰:

10但結果輸出49

用作:

Integer.parseInt(br.readLine());

BufferedReader#read從流中讀取單個字符[0到65535(0x00-0xffff)],因此無法從流中讀取單個整數。

需要在BufferedReader的構造函數中指定InputStreamReader InputStreamReader將字節流轉換為字符流

您可以檢查scanner-vs-bufferedreader

因為49是字符'1'的Unicode值。 read返回單個字符(作為int ,因此它可以使用-1表示流結束)。

選項:

  • 如果要閱讀整行文本,請使用readLine讀取字符串。

  • 如果要輸出讀取的字符,請在檢查它是否不是-1(這意味着您已經到達流的末尾)之后,將其轉換為char

     if (a != -1) { char ch = (char)a; System.out.println(ch); // will output 1 } 

    如果要讀取所有字符,則需要循環。

  • 如果要讀取整數,則可能需要Scanner

BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));
    String a = inp.readLine();
    System.out.println(a);
    inp.close();

read僅讀取單個字符並返回ascii值。 使用readLine()讀取整行並將其轉換為Integer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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