2012-11-09 50 views
1

我已經創建了一個使用readLine()BufferedReader的簡單Java應用程序。代碼如下:爲什麼我不能在Java中的char值後讀取int值?

import java.io.*; 
class demo_data 
{ 
    public static void main(String hh[])throws Exception 
    { 
     char c=' '; 
     int i=0; 
     String name=""; 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.print("Enter char:"); 
     c=(char)br.read(); 
     System.out.print("Enter String:"); 
     name=br.readLine(); 
     System.out.print("Enter value:"); 
     i=Integer.parseInt(br.readLine()); 
     System.out.print("\tChar:"+c+"\tName:"+name+"\tValue:"+i); 
    } 
} 

我的問題是讀取字符值後,該字符串聲明被跳過,我不能夠讀取變量名的值。如果我讀取一個char值,然後嘗試讀取int值,則會拋出一個NumberFormatException。爲什麼?

回答

0

readLine()的調用立即返回,因爲newLine在您輸入第一個char後仍然會在緩衝區中。

添加一個額外的br.readLine()解決這個問題:

System.out.print("Enter char:"); 
    c=(char)br.read(); 
    br.readLine(); 
    System.out.print("Enter String:"); 
    name=br.readLine(); 
1

BufferedReader#read(),讀取你輸入一個字符。它不會在輸入結束時讀取linefeed

因此,您的換行輸入爲br.readLine,您在br.read之後。現在,如果你爲2nd br.readLine輸入一個string,它實際上是第三個。因此那個例外。

因此,您的name變量將包含linefeed - \n,並且您通過的name的字符串將轉到您的int i

解決方法: -

嘗試增加br.read()後空br.readLine消耗遺留linfeed: -

c=(char)br.read(); 
br.readLine(); // Add an empty `br.readLine here. 
System.out.print("Enter String:"); 
name=br.readLine(); 

或者,你也可以去@Peter's answer下面

0

你有在閱讀char c=(char)br.read();後讀取額外的行,因爲它讀取單個字符。

System.out.print("Enter char:"); 
    c=(char)br.read(); 
    br.readLine(); 
    System.out.print("Enter String:"); 
    name=br.readLine(); 
    System.out.print("Enter value:"); 
    i=Integer.parseInt(br.readLine()); 
    System.out.print("\tChar:"+c+"\tName:"+name+"\tValue:"+i); 
0

在每一種情況下,你真的讀線在同一時間不僅僅是一個字符和一個數字。

System.out.print("Enter char:"); 
    char c = br.readLine().charAt(0); 
    System.out.print("Enter String:"); 
    String name = br.readLine(); 
    System.out.print("Enter value:"); 
    int i = Integer.parseInt(br.readLine()); 
相關問題