Java从控制台读取输入时遇到麻烦

时间:2014-01-26 22:54:08

标签: java buffer flush

我一直在攻读我在大学的Java工作(我之前从未做过Java),但我对输入有点困惑。任务是编写一个基本程序,允许用户输入他们的姓名,门牌号,道路名称和城镇,但是当它输入道路名称时,它似乎跳过并且不允许你输入任何城镇的东西。

现在,我尝试了一个刷新缓冲区,但由于它只是覆盖输入内容而无法正常工作。例如,我在输入道路名称后放置了刷新缓冲区,然后忽略该输入。

问题也可能是,即使我使用nextLine而不是下一个,白色空间也会破坏。

这是我的代码;

import java.util.*;

public class AddressProj {

    public static void main(String[] args)
    {
        Scanner myKeyboard = new Scanner(System.in);

        System.out.printf("Please input your surname: ");
        String name = myKeyboard.nextLine();

        System.out.printf("Please input your house number: ");
        int houseNumber = myKeyboard.nextInt();

        System.out.printf("Please input your road name: ");
        String roadName = myKeyboard.nextLine();
        myKeyboard.nextLine(); //Flush buffer

        System.out.printf("Please input your town: ");
        String town = myKeyboard.nextLine();

        System.out.printf("Surname: " + name + "\nHouse Number: " + houseNumber + "\nRoad Name: " + roadName + "\nTown: " + town + "\n");
    }
}

1 个答案:

答案 0 :(得分:2)

nextInt()不读取整行。只是一个int。因此,你要输入结束门牌号的NL将被下一个吃掉。

我强烈推荐更像:

InputStreamReader isr = new InputStreamReader(System.in, "utf-8");
BufferedReader reader = new BufferedReader(isr);

然后,对于每个项目:

reader.readLine();

获取用户的输入,然后根据需要解析Integer.parseInt。