Java无法从控制台读取输入

Java无法从控制台读取输入,java,buffer,flush,Java,Buffer,Flush,我在大学里一直在努力学习Java(在此之前我从未做过Java),但我还是有点受输入的困扰。任务是编写一个基本程序,允许用户输入他们的姓名、门牌号、道路名称和城镇,但当输入道路名称时,它似乎会跳过,不允许您输入城镇的任何内容 现在,我尝试了一个刷新缓冲区,但它不起作用,因为它只是覆盖了输入的内容。例如,我将刷新缓冲区放在道路名称输入之后,然后该输入将被忽略 问题还可能是,尽管我使用的是nextLine而不是next,但空白正在破坏一切 这是我的密码 import java.util.*; pub

我在大学里一直在努力学习Java(在此之前我从未做过Java),但我还是有点受输入的困扰。任务是编写一个基本程序,允许用户输入他们的姓名、门牌号、道路名称和城镇,但当输入道路名称时,它似乎会跳过,不允许您输入城镇的任何内容

现在,我尝试了一个刷新缓冲区,但它不起作用,因为它只是覆盖了输入的内容。例如,我将刷新缓冲区放在道路名称输入之后,然后该输入将被忽略

问题还可能是,尽管我使用的是nextLine而不是next,但空白正在破坏一切

这是我的密码

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");
    }
}
nextInt()不读取整行。只有一个整数。所以你输入的结束门牌号的NL将留给下一个东西来吃

我强烈推荐更像:

InputStreamReader isr = new InputStreamReader(System.in, "utf-8");
BufferedReader reader = new BufferedReader(isr);
然后,对于每个项目:

reader.readLine();

获取用户的输入,然后根据需要使用Integer.parseInt之类的东西进行解析。

你说的“闪存缓冲区”到底是什么意思?@bmargiles刷新缓冲区,我想。@bmargiles呃,抱歉。刷新缓冲区。时间不早了。我知道刷新缓冲区只有在输入一个整数后才可用,这就是为什么我一直在这里做什么。为什么你认为调用nextLine()会刷新缓冲区?我的建议是不要将扫描仪直接连接到System.in。但更一般地说,这种控制台IO在现代实际编程中非常罕见。