如何从do while循环返回一个值

时间:2015-10-30 08:39:33

标签: java loops return conditional

我正在尝试创建一个摇滚,纸张,剪刀游戏,在继续之前需要用户提供有效的输入。我试图解决这个问题的方法是在内部使用do while循环和if else语句来验证输入。如果它不是给出的选择,那么条件保持为假并且程序循环。但是我试图弄清楚如何返回用户输入的正确值,这些值存储在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);

3 个答案:

答案 0 :(得分:1)

只需将变量声明移出循环,使其在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);

您可以阅读有关变量范围的信息,例如here

只是一些评论。在调用"rock".equals(userChoice)时,优先使用equals表示法,以便在任何原因导致userChoice对象为NULL时防止NullPointerException。此外,您可以将此行Scanner user = new Scanner(System.in);移出循环。没有理由在每次迭代时创建扫描程序的新实例。最后一个,虽然条件isRight==false可以用!isRight代替,但不需要将它与某些东西进行比较,因为变量本身就是布尔值。

答案 1 :(得分:1)

在do while之前初始化UserChoice

String UserChoice = "";

do 
....

while ();

System.out.println(UserChoice);

答案 2 :(得分:1)

接下来在循环之外声明变量(正如我在之前的评论中所建议的)对你的代码做了一些评论:

                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实例,而您可以只重用现有的实例。