为什么我的程序在System.in.read()函数之后停止?

时间:2015-01-13 23:20:08

标签: java function class

package myfirstclass;

import java.io.IOException;

public class MyFirstClass {

    public static void main(String[] args) throws IOException {


        Car RedCar;
        RedCar = new Car();

        RedCar.carColor = "red";
        RedCar.milesPerGallon = 25;
        RedCar.numDoors = 2;

        Car BlueCar = new Car();
        BlueCar.carColor = "blue";
        BlueCar.milesPerGallon = 50;
        BlueCar.numDoors = 4;

        System.out.println("Choose a car...");
        int read = System.in.read();


        if(read == 1){
            System.out.println("Hello, and your car is...");

            System.out.println("Red!");

        }



    }
}

输入数字后,例如1,它只是说" Build Successful!",为什么会这样?我如何修复它以确保它读取我的输入并遵循" if"声明正确。

谢谢!

2 个答案:

答案 0 :(得分:2)

System.in.read()只读取一个字节。在您的示例中,变量read将保留值49,而不是1。

改为使用扫描仪:

Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();

有用的链接:

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()

答案 1 :(得分:1)

System.in.read()没有按你的想法行事。它从输入读取一个字节并返回它的整数值。如果键入“1”,System.in.read()将返回0x31或49.不是1.

不幸的是,你想要的东西在Java中太复杂了。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
if (Integer.parseInt(in.readLine()) == 1) {
    // do something
}

第一行创建一个Java需要读取行的无用对象。第二行使用in.readLine()从输入中读取一行,将其转换为Integer.parseInt的整数,然后将其与1进行比较。