Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从do while循环返回值_Java_Loops_Return_Conditional - Fatal编程技术网

Java 如何从do while循环返回值

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-while循环和if-else语句来验证输入。如果不是给定的选择,则条件保持为false,程序循环。然而,我试图找出如何返回用户输入的正确值,该值存储在UserChoice中,这样我就可以访问循环外部的变量并继续程序

这是我的密码:

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之外声明一个变量