Java代码不等待扫描程序的输入

时间:2014-04-02 02:30:13

标签: java while-loop switch-statement java.util.scanner

我正在使用Eclipse和JDK 8创建一个用Java编写的程序。我使用以下代码创建了ScannerScanner input = new Scanner(System.in);

然后我使用代码String

创建了String command = "no";

我计划使用此字符串来控制代码中的while循环,以及switch循环中的while。循环以:while(command = "no")开头,在while循环中,我使用我之前创建的Scanner来让用户定义String和{{1}的值在代码执行时,它可以工作。在那之后(但仍然在int循环中,我在下面一行放置while,然后是command = input.nextLine();,以设置input.close();字符串的值,并关闭command。但是当我执行代码时,它似乎跳过了那个,以及我之后直接放置的Scanner(也应该由switch字符串控制),然后去在command循环之后编码,即使while仍设置为“否”,这应该会使command循环重新开始。

如何让代码暂停并等待在while输入内容,以及如何让command = input.nextLine();按原样运行?

以下是整个代码:

`import java.util.Scanner;

switch

5 个答案:

答案 0 :(得分:2)

while(command.equals("no"))

而不是

while(command == "no")

以及最后没有case ("yes"):语句的break;,所以它也将继续下一个案例。

Scanner#nextInt方法无法读取您输入的最后一个换行符 - here

答案 1 :(得分:2)

改变你的:

age = input.nextInt();

致:

age = Integer.parseInt(input.nextLine());

原因" nextInt()"没有正常工作是因为它在队列中留下了一个空的空间,在下一个" nextLine()"

在比较两个字符串时,你应该总是使用.equals("一些字符串")。

我希望这可以修复你的错误:)

另外"气垫船满鳗鱼"指出如果你确实需要重复while循环,扫描仪将被关闭,因此会导致错误。

答案 2 :(得分:0)

试试这个:while(command.equals("no"))

答案 3 :(得分:0)

while(command ==" no")因为你的测试字符串相等而无法正常工作。执行此操作时,您需要使用.equals来测试字符串值是否相等。

所以使用:

而(command.equals("无&#34))

答案 4 :(得分:0)

在您完成使用之前,您似乎还在关闭while循环中的扫描程序变量输入

while(!command.equalsIgnoreCase("yes")) {
    System.out.println("Welcome to HUMAN CREATOR");
    System.out.println("What is the human's name?");
    name = input.nextLine();
    System.out.println("Okay, its name is " + name + ".");

    System.out.println("What about its age?");
    age = input.nextInt();
    System.out.println(name + " is " + age + " years old.");
    System.out.println("Is this correct?");
    command = input.nextLine();
    input.close();   // !! ************ here *****

    switch (command) {
    case ("yes"):
        System.out.println("Great! Lets make the human!");
        Human h1 = new Human();
        h1.setAge(age);
        h1.setName(name);

    case ("no"):
        System.out.println("Okay, lets start again.");
    }
}

在while循环之后关闭它会更有意义吗,这样它在循环的每次迭代中都可以使用吗?

在获得input.nextLine();以捕获行结束标记后,还要添加额外的input.nextInt()

age = input.nextInt();
input.nextLine();