java scanner不接受两个带有空格的单词

时间:2015-05-11 21:42:05

标签: java runtime-error java.util.scanner space

我正在尝试创建一个简单的项目来询问用户是真还是假,如果是真的那么扫描仪会继续将类别名称存储在arraylist中。 并且它可以正常工作,直到您在类别名称“first second”中输入两个单词,例如由于某种原因它跳转到条件true或false并检查我是否输入了另一个单词而不是true或false并执行catch子句。 我试过使用scanner.next或nextline,nextline只是跳转到true或false而不询问类别名称。 请帮忙。 非常感谢你。

public class MainClass {


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

    Categories c = new Categories();

    System.out.println("Please enter true if you want to add a category \n or false if not");

    try {
        check = in.nextBoolean();
    } catch (InputMismatchException e) {
        System.out.println("Sorry you must put true or false!!!");
        System.exit(0);

            }


    while (check) {
        System.out.println("Please enter category name");
        c.category.add(in.next().toString());
        System.out.println("do you want to add more true or false");

        try {
            check = in.nextBoolean();
        } catch (InputMismatchException e) {
            System.out.println("Sorry you must put true or false!!!");
            System.exit(0);
        }

    }

    System.out.println("Thank you all categories are added");
    System.out.println(c.category);





}

}

2 个答案:

答案 0 :(得分:2)

更改

check = in.nextBoolean();

check = in.nextBoolean();
in.nextLine(); // to swallow end of line token

并更改

c.category.add(in.next().toString());

为:

c.category.add(in.nextLine()); // to get the whole line

答案 1 :(得分:0)

您可以使用包装在BufferedReader周围的InputStreamReader:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
reader.readLine(); // this will read two words