为什么我不能在Java中的char值之后读取int值?

时间:2012-11-09 07:39:11

标签: java

我使用readLine() BufferedReader创建了一个简单的Java应用程序。代码如下:

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 个答案:

答案 0 :(得分:1)

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

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

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

解决方法: -

尝试在br.readLine之后添加一个空的br.read()来消耗剩余的linfeed: -

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

或者,您也可以使用下面的@Peter's answer

答案 1 :(得分: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();

答案 2 :(得分: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);

答案 3 :(得分: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());