【问题标题】:How to make program catch error in exception handling-Java [closed]如何使程序在异常处理中捕获错误-Java [关闭]
【发布时间】:2016-03-19 16:37:03
【问题描述】:

大家好,所以我的程序并没有真正捕捉到任何错误,即当我输入一个字母而不是一个有效数字时,它确实捕捉到了错误,但它不会返回到菜单,它只是显示语句。当我在 switch 语句之外使用数字时,即 5 它只是循环回到菜单而不显示错误。我的代码如下:

public void runMenu() {
    Scanner Option = new Scanner (System.in);
    int x = 1;
    int Choice = 0; 
  do{  
    try{
           System.out.println("Choose Option");
             System.out.println("");
             System.out.println("1: Create Account");
             System.out.println("2: Check Account");
             System.out.println("3: Take Action");
             System.out.println("4: Exit");

        System.out.println("Please choose");
         Choice= Option.nextInt();  

    switch (Choice)  //used switch statement instead of If else because more effective
    {
    case 1:
        CreateAccount();
        break;   //breaks iteration
    case 2: 
        selectAccount();
        break;
    case 3:
         Menu();
         int choice = UserInput();
         performAction(choice);
        break;
    case 4:
        System.out.println("Thanks for using the application"); 
        System.exit(0);
    default:
        throw new Exception();
    // x=2; //if code doesn't run successfully then x !=2 leading to exception
} 
}

【问题讨论】:

  • 如果出现异常,为什么要返回菜单?您在 catch 块中编写了 return 语句
  • John - 请注意,您对问题的最后一次编辑使代码不可编译......一旦您修复了编译错误,行为就会有所不同。如果您希望人们帮助您,请不要这样做。

标签: java exception-handling switch-statement


【解决方案1】:

案例 4 没有中断,因此您永远不会实例化您的异常!

你应该在你的开关结束时有这个:

default:
    throw new Exception();
    break;

另外,您需要从 catch 部分删除 return。

    catch (Exception e){
        System.err.println("Enter Correct Input");
        return ;
    }

【讨论】:

  • 进一步你应该删除返回
  • 我从 catch 部分删除了返回,它只是在疯狂地运行。,它不会停止循环:s
  • 只有当我输入字母时它才能正常工作,当它的数字不正确时
  • 部分正确。但是,case 4 不需要break,因为System.exit 永远不会返回。此外,最后一个开关臂的中断也不需要break。是否包含多余的 break 语句是一个文体问题......只是。
【解决方案2】:

当您输入 1-4 以外的数字时,您应该有一个默认选项, 在显示错误消息后重新运行问题调用 runMenu()

例如,

 case 4:
        System.out.println("Thanks for using the application"); 
        System.exit(0);
 default:
        println "Choose 1-4";
        runMenu()

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    这确实不是通常抛出异常的情况。如果您希望程序在用户输入无效选项时仅循环返回菜单,则只需在 while 循环中添加默认情况。你甚至不需要你的 x 整数。如果你愿意,你可以尝试在默认情况下抛出一个新的异常。

        import javax.swing.*;
        import java.util.Arrays;
        import java.util.Scanner;
    
        public class runMenu {
            public void runMenu() {
    
    
                Scanner Option = new Scanner (System.in);
    
                int Choice = 0;
    
                        System.out.println("Choose Option");
                        System.out.println("");
                        System.out.println("1: Create Account");
                        System.out.println("2: Check Account");
                        System.out.println("3: Take Action");
                        System.out.println("4: Exit");
    
    
    
                        System.out.println("Please choose");
                        Choice= Option.nextInt();
    
    
    
    
                        switch (Choice)  //used switch statement instead of If else because more effective
                        {
                            case 1:
    
                                CreateAccount();
                                break;   //breaks iteration
    
    
                            case 2:
    
                                selectAccount();
    
    
                                break;
    
                            case 3:
                                Menu();
                                int choice = UserInput();
                                performAction(choice);
    
                                break;
                            case 4:
                                System.out.println("Thanks for using the application");
                                System.exit(0);
    
                                // x=2; //if code doesn't run successfully then x !=2 leading to exception
    
                                throw new Exception();
    
                                break;
                            default:
                                System.out.println("Invalid option. Please try              
    
                                again.");
    
                                 throw new Exception();
    
                                runMenu();
    
                        }
                    }
    
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 2011-08-17
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多