【问题标题】:Java reprompt for user input with try... catchJava 使用 try...catch 重新提示用户输入
【发布时间】:2018-02-25 23:01:07
【问题描述】:

因此,如果用户输入像 453-* 这样的后缀值,我的方法 EvalPostFix() 会起作用,但是当用户输入像 43*+ 这样的无效字符串或任何无效字符串时,程序希望程序重新提示用户输入不知道如何用 try catch 实现..

'

        String in;
    while(true){
    System.out.println("Please enter the numbers first followed by the operators, make sure to have one less operator than of numbers");

        try {
            in = getString();
            int result = EvalPostFix(in); 
            System.out.println(result);


        } catch (IOException e) {
            // TODO Auto-generated catch block
            String s = "Not a valid postfix string";
            e.toString();
            in = getString();
        }
    }

'

【问题讨论】:

  • 您应该避免对用户输入/输出使用异常。而是创建一个返回(布尔)结果或类似结果的验证函数。此外,抛出 IOException 并不是一个好主意,它可能是一个解析异常或类似的异常。并且永远不要使用没有breakwhile(true) 循环:)
  • @owlstead 仍然应该捕获用户输入,这些输入无法解析为预期的格式,这最容易通过异常处理来完成
  • 嗯,是的,在这种情况下,您可以对输入进行简单的检查并处理我猜想的解析器异常,为其重新创建另一个解析器是多余的。

标签: java


【解决方案1】:

查看您的代码,我认为您只需删除 catch 块中的 in = getString(); 并在 try 块的末尾添加一个 break

我不建议您使用 while(true)IOException 来执行您正在执行的操作,但这应该可以让您的代码正常工作。

【讨论】:

    【解决方案2】:

    使用标志:

    boolean flag = false;
    while(!flag)
    {
    //make the loop break, if no exception caught
    flag = true;
        try{
    
        }
        catch{
           //make the loop repeat
           flag = false;
        }
     }
    

    这应该在您每次捕获异常时重复提示。您也可以使用它来验证输入。

    标志的方向取决于您的偏好。我喜欢在发生错误时标记为 true ;)

    一旦您获得有效输入,这也会中断您的 while 循环。

    【讨论】:

      【解决方案3】:

      这样的东西可用于获取所需规格的输入

      public static void userMove() {
           System.out.println("Where would you like to move? (R, L, U, D)\n");
           Scanner input  = new Scanner(System.in) ;
           while (true){
               String userInput  = input.next() ;
               if(userInput.length()>1){
                   System.out.println("Please input a valid direction");
               }else{
                   break ;
               }
           }
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2012-04-27
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多