1

我创建了一个简单的 Java 应用程序readLine(),使用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值然后尝试读取int值,它会抛出一个NumberFormatException. 为什么?

4

4 回答 4

1

BufferedReader#read(), 从您的输入中读取单个字符。它不会读取linefeed输入末尾的 。

因此,您的换行符将作为br.readLine您在br.read. 现在,如果您string为输入 a 2nd br.readLine,它实际上是第 3 个。因此那个例外。

因此,您的name变量将包含 a linefeed - \n,并且您传递的字符串将name转到您的int i.

解决方法: -

尝试在消耗剩余的 linfeedbr.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()立即返回,因为newLine在您输入第一个 之后,它仍然在缓冲区中char

添加一个额外的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

阅读 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);
于 2012-11-09T07:48:32.937 回答
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());
于 2012-11-09T07:49:33.177 回答