Java 如何从do while循环返回值
我正在尝试创建一个石头、布、剪刀游戏,在继续之前需要用户的有效输入。我试图解决这个问题的方法是通过在内部进行do-while循环和if-else语句来验证输入。如果不是给定的选择,则条件保持为false,程序循环。然而,我试图找出如何返回用户输入的正确值,该值存储在UserChoice中,这样我就可以访问循环外部的变量并继续程序 这是我的密码:Java 如何从do while循环返回值,java,loops,return,conditional,Java,Loops,Return,Conditional,我正在尝试创建一个石头、布、剪刀游戏,在继续之前需要用户的有效输入。我试图解决这个问题的方法是通过在内部进行do-while循环和if-else语句来验证输入。如果不是给定的选择,则条件保持为false,程序循环。然而,我试图找出如何返回用户输入的正确值,该值存储在UserChoice中,这样我就可以访问循环外部的变量并继续程序 这是我的密码: do{ System.out.println("Enter in rock, paper or scissors:"); Scanner
do{
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
String UserChoice = user.nextLine();
if(!UserChoice.equals("rock") && (!UserChoice.equals("paper")) && (!UserChoice.equals("scissors"))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
}else{
isRight = true;
}
}while(isRight==false);
只需将变量声明移出循环,使其在do while块的作用域之外可用,如下所示:
String userChoice = null;
do{
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
userChoice = user.nextLine();
if(!"rock".equals(userChoice) && (!"paper".equals(userChoice)) && (!"scissors".equals(userChoice))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
}else{
isRight = true;
}
}while(isRight==false);
//here you can still use it
System.out.println(userChoice);
例如,您可以阅读有关变量作用域的内容
还有一些评论。在调用
equals
时,最好使用“rock”.equals(userChoice)
符号,以防止在userChoice
对象因任何原因为空时出现NullPointerException。此外,您可以移动此行Scanner user=new Scanner(System.in)代码>循环外。没有理由在每次迭代中创建新的scanner实例。最后一个,而条件isRight==false
可以替换为!isRight
,无需将其与其他内容进行比较,因为变量本身是布尔值。只需将变量声明移出循环,使其在do while块的范围之外可用,就像:
String userChoice = null;
do{
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
userChoice = user.nextLine();
if(!"rock".equals(userChoice) && (!"paper".equals(userChoice)) && (!"scissors".equals(userChoice))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
}else{
isRight = true;
}
}while(isRight==false);
//here you can still use it
System.out.println(userChoice);
例如,您可以阅读有关变量作用域的内容
还有一些评论。在调用equals
时,最好使用“rock”.equals(userChoice)
符号,以防止在userChoice
对象因任何原因为空时出现NullPointerException。此外,您可以移动此行Scanner user=new Scanner(System.in)代码>循环外。没有理由在每次迭代中创建新的scanner实例。最后一个,而条件isRight==false
可以替换为!isRight
,无需将其与其他内容进行比较,因为变量本身是布尔值。只需将变量声明移出循环,使其在do while块的范围之外可用,就像:
String userChoice = null;
do{
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
userChoice = user.nextLine();
if(!"rock".equals(userChoice) && (!"paper".equals(userChoice)) && (!"scissors".equals(userChoice))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
}else{
isRight = true;
}
}while(isRight==false);
//here you can still use it
System.out.println(userChoice);
例如,您可以阅读有关变量作用域的内容
还有一些评论。在调用equals
时,最好使用“rock”.equals(userChoice)
符号,以防止在userChoice
对象因任何原因为空时出现NullPointerException。此外,您可以移动此行Scanner user=new Scanner(System.in)代码>循环外。没有理由在每次迭代中创建新的scanner实例。最后一个,而条件isRight==false
可以替换为!isRight
,无需将其与其他内容进行比较,因为变量本身是布尔值。只需将变量声明移出循环,使其在do while块的范围之外可用,就像:
String userChoice = null;
do{
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
userChoice = user.nextLine();
if(!"rock".equals(userChoice) && (!"paper".equals(userChoice)) && (!"scissors".equals(userChoice))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
}else{
isRight = true;
}
}while(isRight==false);
//here you can still use it
System.out.println(userChoice);
例如,您可以阅读有关变量作用域的内容
还有一些评论。在调用equals
时,最好使用“rock”.equals(userChoice)
符号,以防止在userChoice
对象因任何原因为空时出现NullPointerException。此外,您可以移动此行Scanner user=new Scanner(System.in)代码>循环外。没有理由在每次迭代中创建新的scanner实例。最后一个,而条件isRight==false
可以替换为!isRight
,无需将其与其他变量进行比较,因为变量本身是布尔值。在do while之前初始化UserChoice
String UserChoice = "";
do
....
while ();
System.out.println(UserChoice);
在执行do while之前初始化UserChoice
String UserChoice = "";
do
....
while ();
System.out.println(UserChoice);
在执行do while之前初始化UserChoice
String UserChoice = "";
do
....
while ();
System.out.println(UserChoice);
在执行do while之前初始化UserChoice
String UserChoice = "";
do
....
while ();
System.out.println(UserChoice);
在循环之外声明变量(正如我在前面的注释中所建议的那样)之后,有几点关于代码的注释:
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
String userChoice = user.nextLine(); //stick to naming conventions, it makes your code easier to read
while(!userChoice.equals("rock") && (!userChoice.equals("paper")) && (!userChoice.equals("scissors"))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
System.out.println("Enter in rock, paper or scissors:");
userChoice = user.nextLine(); //stick to naming
}
根本不需要每次循环整个代码块。所有需要重复的是错误消息和读取userChoice的新值,并且只有在原始条目无效的情况下才会重复
例如,在您的代码中,每次循环时都会创建一个新的Scanner实例,而您可以重用现有的实例。在循环外部声明变量(正如我在前面的注释中所建议的)旁边,有几点关于您的代码的注释:
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
String userChoice = user.nextLine(); //stick to naming conventions, it makes your code easier to read
while(!userChoice.equals("rock") && (!userChoice.equals("paper")) && (!userChoice.equals("scissors"))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
System.out.println("Enter in rock, paper or scissors:");
userChoice = user.nextLine(); //stick to naming
}
根本不需要每次循环整个代码块。所有需要重复的是错误消息和读取userChoice的新值,并且只有在原始条目无效的情况下才会重复
例如,在您的代码中,每次循环时都会创建一个新的Scanner实例,而您可以重用现有的实例。在循环外部声明变量(正如我在前面的注释中所建议的)旁边,有几点关于您的代码的注释:
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
String userChoice = user.nextLine(); //stick to naming conventions, it makes your code easier to read
while(!userChoice.equals("rock") && (!userChoice.equals("paper")) && (!userChoice.equals("scissors"))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
System.out.println("Enter in rock, paper or scissors:");
userChoice = user.nextLine(); //stick to naming
}
根本不需要每次循环整个代码块。所有需要重复的是错误消息和读取userChoice的新值,并且只有在原始条目无效的情况下才会重复
例如,在您的代码中,每次循环时都会创建一个新的Scanner实例,而您可以重用现有的实例。在循环外部声明变量(正如我在前面的注释中所建议的)旁边,有几点关于您的代码的注释:
System.out.println("Enter in rock, paper or scissors:");
Scanner user = new Scanner(System.in);
String userChoice = user.nextLine(); //stick to naming conventions, it makes your code easier to read
while(!userChoice.equals("rock") && (!userChoice.equals("paper")) && (!userChoice.equals("scissors"))){
System.out.println("You must enter either rock, paper or scissors. Try again: ");
System.out.println("Enter in rock, paper or scissors:");
userChoice = user.nextLine(); //stick to naming
}
根本不需要每次循环整个代码块。所有需要重复的是错误消息和读取userChoice的新值,并且只有在原始条目无效的情况下才会重复
例如,在您的代码中,每次循环时都会创建一个新的Scanner实例,而您可以重用现有的Scanner实例。在loo之外声明一个变量