Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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

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 在打印错误消息后,如何在给定有效输入之前将用户困在循环中?_Java_Loops - Fatal编程技术网

Java 在打印错误消息后,如何在给定有效输入之前将用户困在循环中?

Java 在打印错误消息后,如何在给定有效输入之前将用户困在循环中?,java,loops,Java,Loops,我想要求用户输入一个输入,如果它无效,我将弹出一个错误语句,并要求用户输入另一个输入。我如何编写一个循环,让用户在收到错误后保持相同的输入请求?我以前使用的方法都是在Python中尝试的。Java中的等价物是什么 导入java.util.Scanner; 导入java.util.Random; 公共班机{ //设置移动列表 枚举移动{ 岩石 纸张 剪刀 } //启动扫描仪并接受用户输入 公共静态字符串getUserMove{ 扫描仪键盘=新的ScannerSystem.in; 字符串手势=ke

我想要求用户输入一个输入,如果它无效,我将弹出一个错误语句,并要求用户输入另一个输入。我如何编写一个循环,让用户在收到错误后保持相同的输入请求?我以前使用的方法都是在Python中尝试的。Java中的等价物是什么

导入java.util.Scanner; 导入java.util.Random; 公共班机{ //设置移动列表 枚举移动{ 岩石 纸张 剪刀 } //启动扫描仪并接受用户输入 公共静态字符串getUserMove{ 扫描仪键盘=新的ScannerSystem.in; 字符串手势=keyboard.nextLine; 字符串userMove=signature.toUpperCase; 如果userMove.equalsROCK | | userMove.equalsPAPER | | userMove.equals剪刀{ 返回userMove; }否则{ System.out.PrintLn这不是有效的输入+ 请再试一次!; 返回无效输入; } } //在CPU移动时获取随机输入 公共静态字符串getAiMove{ 字符串Ai; 随机=新随机; int input=random.nextInt3; 如果输入=1{ Ai=Move.ROCK.name; }如果输入=2,则为else{ Ai=Move.PAPER.name; }否则{ Ai=Move.SCISSORS.name; } 返回Ai; } //确定胜出结果 公共静态字符串参数[]{ System.out.println针对CPU选择移动:; System.out.printlnROCK、纸或剪刀; String playerMove=getUserMove; System.out.printlnYou抛出:+playerMove; 如果!playerMove.equals输入无效{ 字符串cpuMove=getAiMove; System.out.PRINTLN:+cpuMove; 如果播放移动.equalscpuMove{ System.out.printlnTie!没人赢!; } //运动员是摇滚乐选手 否则如果playerMove.equalsMove.ROCK.name{ 如果cpuMove.equalsMove.PAPER.name{ System.out.println你输了!\nPaper打败了Rock!; }否则{ System.out.println你赢了!\n洛克击败剪刀!; } } //玩家是纸 否则如果playerMove.equalsMove.PAPER.name{ 如果cpuMove.equalsMove.SCISSORS.name{ System.out.println你输了!\n纸片胜过纸张!; }否则{ System.out.println你赢了!\nPaper打败了Rock!; } } //选手是剪刀 否则{ 如果cpuMove.equalsMove.ROCK.name{ System.out.println你输了!\nPaper打败了Rock!; }否则{ System.out.println你赢了!\n洛克击败剪刀!; } } } }
} 您可以尝试这样的操作,而不是getUserMove中的if语句,这将强制用户输入有效的手势

//启动扫描仪并接受用户输入 公共静态字符串getUserMove{ 扫描仪键盘=新的ScannerSystem.in; 字符串手势=keyboard.nextLine.toUpperCase; while!userMove.equalsROCK | | userMove.equalsPAPER | | userMove.equals剪刀{ System.out.PrintLn这不是有效的输入。+请重试!; 手势=keyboard.nextLine.toUpperCase; } 回敬手势; }
更改getUserMove方法,如下所示:-

public static String getUserMove() {
        boolean flag = true; 
        Scanner keyboard = new Scanner(System.in);
        String gesture = keyboard.nextLine();
       //loops until the user will not provide the desired input
        while (flag) {

            String userMove = gesture.toUpperCase();
            if (userMove.equals("ROCK") || userMove.equals("PAPER") || userMove.equals("SCISSORS")) {
                gesture = userMove;
                flag = false;// set flag to false once user will give valid input.
            } else {
                System.out.println("This is not a valid input." + "Please try again!");
                keyboard = new Scanner(System.in);// get input from user incase of invalid input.
                gesture = keyboard.nextLine();
            }
        }
        keyboard.close();// close scanner(to prevent memory leak)
        return gesture;
    }

就这么简单!isValidinput{input=getInput;}。代替您自己的输入获取和有效性检查。你真的需要问一个更有针对性的问题。你到底有什么问题?获取输入?检查一下?写一个while循环?这很有帮助。关于键盘的问题。关闭;。您会在每次请求用户输入时关闭扫描仪,还是仅在代码中不再需要扫描仪时关闭?@MexicanPapi不客气。我们只在不需要任何资源时才关闭它,这样就不会有该对象的引用,它将由gc收集。