[英]do while loop Java
因此,我几乎是编码的新手,并且忙于“ do while循环”,我的代码可能很糟糕,很可能有1000多种更好的方式来做我想做的事情,无论如何。
我正在尝试使用main方法,然后再使用另外两种方法(出于练习目的)要求用户选择1到10之间的数字,然后他们是否要再次尝试。
我让代码运行起来,直到要求用户输入是/否,然后代码停止运行,我才知道为什么?
public static void main(String[] args) {
chooseNum();
}
public static boolean chooseNum() {
int number = 4;
do {
System.out.println("Enter a number 1 to 10");
int userNum = in.nextInt();
if (number == userNum) {
System.out.println("You chose the correct number!");
return tryAgain();
} else if (number != userNum) {
System.out.println("You chose the incorrect number!");
return tryAgain();
} else
System.out.println("invalid Response");
}
while (false);
return false;
}
public static boolean tryAgain(){
System.out.println("Try again? yes/no");
String response = in.nextLine();
if (response.equalsIgnoreCase("yes")){
return chooseNum();
}else if (response.equalsIgnoreCase("no")){
return false;
}else
return false;
}
}
和我的输出如下:
Enter a number 1 to 10
1
You chose the incorrect number!
Try again? yes/no
Process finished with exit code 0
为了让我输入是或否,我似乎无法进一步了解它。
我知道这是基本的操作,很可能看起来很可悲,但任何帮助都会受到赞赏。
也许另一个菜鸟可以得到帮助别人的机会:)
非常感谢!
您可以通过在方法内部创建一个新的扫描程序实例来避免nextLine错误。 我通过在choiceNum和tryAgain中声明一个新的Scanner对您的代码进行了编辑,这可以避免由于缓冲输入而导致的问题。 我希望这有帮助。
import java.util.Scanner;
public class dowhile {
public static void main(String[] args) {
chooseNum();
}
public static boolean chooseNum() {
Scanner in = new Scanner(System.in);
int number = 4;
do {
System.out.println("Enter a number 1 to 10");
int userNum = in.nextInt();
if (number == userNum) {
System.out.println("You chose the correct number!");
return tryAgain();
} else if (number != userNum) {
System.out.println("You chose the incorrect number!");
return tryAgain();
} else
System.out.println("invalid Response");
}
while (false);
return false;
}
public static boolean tryAgain(){
Scanner in = new Scanner(System.in);
System.out.println("Try again? yes/no");
String response = in.nextLine();
if (response.equalsIgnoreCase("yes")){
return chooseNum();
}else if (response.equalsIgnoreCase("no")){
return false;
}else
return false;
}
}
执行该行时, return tryAgain();
, chooseNum()
方法结束。 那是return语句的结果。
使用next()
而不是nextLine()
因为当您读取int并添加\\n
来提交值时。 扫描程序将此作为输入。 next()
应该忽略先前输入的\\n
并且将按照您的期望进行输入。
啊,“ nextLine”陷阱...
输入1时,STDIN包含1\\n\\r
。 当您调用nextInt()时,它将在STDIN流中弹出1,留下\\n\\r
。 现在,当它调用nextLine()获取下一个输入时,它会读取下一个\\n\\r
,并返回一个空字符串,因为\\n\\r
仍然污染了IN流。 如果改用next(),它将忽略\\n\\r
(和任何其他空格),并为您提供STDIN中的下一个单词。 (您也可以只调用两次nextLine()从nextInt调用中清除\\n\\r
)
这是为此使用do-while的正确方法。
public static void main(String[] args) {
chooseNum();
}
public static void chooseNum() {
int number = 4;
do {
System.out.println("Enter a number 1 to 10");
int userNum = in.nextInt();
if (number == userNum) {
System.out.println("You chose the correct number!");
} else if (number != userNum) {
System.out.println("You chose the incorrect number!");
} else
System.out.println("invalid Response");
}
while (tryAgain());
}
public static boolean tryAgain(){
do {
System.out.println("Try again? yes/no");
String response = in.nextLine();
if (response.equalsIgnoreCase("yes")){
return true;
}else if (response.equalsIgnoreCase("no")){
return false;
}else
System.out.println("Invalid response.");
}
} while(true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.