Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/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 - Fatal编程技术网

Java 如何防止用户输入无效答案

Java 如何防止用户输入无效答案,java,Java,我试图阻止用户输入除是或否之外的任何内容,但当他们这样做时,总是说“错误,请永远重试” publicstaticvoidmain(字符串[]args){ System.out.println (“是否要添加接收。是或否”); 扫描仪目标=新扫描仪(System.in); 字符串TempAnswer; TempAnswer=target.nextLine(); 布尔标志=真; while(flag==true){ 如果(“是”。相等信号情况(TempAnswer)){ System.out.pri

我试图阻止用户输入除是或否之外的任何内容,但当他们这样做时,总是说“错误,请永远重试”

publicstaticvoidmain(字符串[]args){
System.out.println
(“是否要添加接收。是或否”);
扫描仪目标=新扫描仪(System.in);
字符串TempAnswer;
TempAnswer=target.nextLine();
布尔标志=真;
while(flag==true){
如果(“是”。相等信号情况(TempAnswer)){
System.out.println(“是”);
flag=false;
}else if(“否”。相等信号情况(TempAnswer)){
系统输出打印项次(“否”);
flag=false;
}否则{
System.out.println(“错误再次输入!!”;
}
}
}

在while循环中,您永远不会将输入值重新分配给您的
TempAnswer
变量,循环将无限运行,因为您永远不会根据用户的输入更改布尔值

少数旁注:

  • 使用camelCase而不是PascalCase来定义成员变量标识符
  • 不要引入冗余代码。使用
    while(true)
    而不是定义布尔变量
    flag
    并将其用作条件;相应地,使用
    break而不是将
    标志设置为false
  • 最终,我会将您的代码改写如下:

    publicstaticvoidmain(字符串[]args){
    System.out.println(“您想添加receipt.Yes还是No”);
    扫描仪目标=新扫描仪(System.in);
    字符串tempAnswer=“”;
    while(true){
    如果(“是”。相等信号情况(tempAnswer)){
    System.out.println(“是”);
    打破
    }else if(“否”。相等信号情况(tempAnswer)){
    系统输出打印项次(“否”);
    打破
    }否则{
    System.out.println(“错误再次输入!!”;
    tempAnswer=target.nextLine();
    }
    }
    }
    
    摆脱多余的呼叫,确保在循环中阅读答案。如果不这样做,您将无限期地循环,因为您没有更改循环条件

    对于这样小的范围,使用break来中断循环,而不是使用标志

    另外,不要使用
    Boolean
    ,而是使用
    Boolean
    。您可能永远不必使用
    布尔值
    ,所以不要使用它

    publicstaticvoidmain(字符串[]args){
    System.out.println(“您想添加receipt.Yes还是No”);
    扫描仪目标=新扫描仪(System.in);
    while(true){
    字符串tempAnswer=target.nextLine();
    如果(“是”。相等信号情况(tempAnswer)){
    System.out.println(“是”);
    打破
    }
    如果(“否”。相等信号情况(tempAnswer)){
    系统输出打印项次(“否”);
    打破
    }
    System.out.println(“错误再次输入!!”;
    }
    }
    
    键入正确答案后,尝试打破循环

    public static void main(String[] args) {
        System.out.println
            ("Would you like to add a Reciept. Yes or No");
        Scanner target = new Scanner(System.in);
        String TempAnswer;
        TempAnswer = target.nextLine();
        while (True) {
            if ("yes".equalsIgnoreCase(TempAnswer)) {
                System.out.println("Yes");
                break;
            } else if ("no".equalsIgnoreCase(TempAnswer)) {
                System.out.println("No");
                break;
            } else {
                System.out.println("Error Enter Again!!");
            }
        }
    }
    

    据我所知,您不能使用控制台输入。通过创建只包含正确答案的下拉列表
    while(flag)
    这就足够了,请遵守Java约定。变量名以小写字母开头。您应该能够遵循程序流程并查看逻辑。如果输入的anser不正确,则转到else子句,打印“Error enter REACH!”然后重新开始循环。这将导致您转到else子句,打印。。。您需要再次获取用户输入。您遇到了与op相同的问题…而且Java SE中没有定义
    True