1

readLine()を使用して簡単な Java アプリケーションを作成しましたBufferedReader。コードは次のとおりです。

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から値を読み取ろうとするとintNumberFormatException. なんで?

4

4 に答える 4

1

BufferedReader#read()、入力から1文字を読み取ります。linefeed入力の最後でを読み取りません。

したがって、ラインフィードは、の後にあるへの入力として使用されbr.readLineますbr.read。さて、にaを入力するstringと、2nd br.readLine実際には3番目になります。したがって、その例外。

したがって、name変数には。が含まれ、linefeed - \n渡した文字列nameはになりますint i

回避策:-

残りのlinfeedを消費するには、br.readLine後に空を追加してみてください:-br.read()

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

または、以下の@Peterの回答を使用することもできます

于 2012-11-09T07:44:01.257 に答える
0

最初のを入力した後もバッファに残っているため、への呼び出しはreadLine()すぐに戻ります。 newLinechar

br.readLine()これを修正する ために追加します。

    System.out.print("Enter char:");
    c=(char)br.read();
    br.readLine();
    System.out.print("Enter String:");
    name=br.readLine();
于 2012-11-09T07:41:56.233 に答える
0

いずれの場合も、1 つの文字と 1 つの数字だけでなく、実際には一度に 1 行ずつ読み取っています。

    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());
于 2012-11-09T07:49:33.177 に答える
0

c=(char)br.read();単一の文字を読み取るため、char を読み取った後に余分な行を読み取る必要があります。

    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);
于 2012-11-09T07:48:32.937 に答える