我正在使用Eclipse和JDK 8创建一个用Java编写的程序。我使用以下代码创建了Scanner
:Scanner 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
答案 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();