br.read()返回错误的值

时间:2015-01-29 16:05:47

标签: java

public class ConstructSkirt implements Fashion {

    int age;
    double FullLength,BottomRound,WaistRound;
    // these are the finall measurements after adding seam allownace
    double MFullLength,MBottomRound,MWaistRound;
    final int  fold=4;

    public void setMeasurements()
    {

        System.out.println("Measurements are set based on the age");

        try {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter the age of the person:");
            age=br.read();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        switch(age)
        {
                    .
                    .

这里当我输入年龄为10时,它返回值49到年龄,这导致它在切换案例中输入错误的代码。

br.read返回错误值的原因是什么。

3 个答案:

答案 0 :(得分:3)

您应该使用br.readLine();代替。它会返回String,而不是int,因此您必须使用Integer.parseInt()方法转换返回的值:

int age = Integer.parseInt(br.readLine());

答案 1 :(得分:3)

BufferedReader#read()返回,我引用,“字符读取,为0到65535(0x00-0xffff)范围内的整数,或者如果已到达流末尾则为-1”。

它基本上返回读取为int的一个字符的代码点。

在旁注中,您应该尝试使用Scanner,它更符合您的目的。

快速&肮脏的例子:

Scanner s = new Scanner(System.in);
System.out.print("Enter the age of the person:");
int age = s.nextInt();
System.out.printf("You typed %d%n", age);
s.close();

<强> I / O

Enter the age of the person:123
You typed 123

答案 2 :(得分:1)

如果将Scanner用于程序而不是BufferedReader

,可能会更好
Scanner scan = new Scanner(System.in);
scan.nextLine();