本人新手 最近刚看到异常这一章 想写个自定义异常代码 实现的功能:如果是数字超出范围的异常由自定义异常给出,其他异常则有公共异常给出。试着写了下编译时发现自定义异常开始就有 如何改进
下面这个是自定义的异常类 不知道写错没class Myexception extends Exception {
public static void compute(int a) throws Myexception 
{
if(a!=1 || a!=2 || a!=3)
{
 throw new Myexception();
}
       
}
}
 
下面是测试程序 import java.util.Scanner;
public class GuessFist {
    
    public static void main(String[] args) {
        System.out.println("欢迎来到猜拳游戏");
       System.out.println("------------------------");
       do
       { System.out.println("请选择一个角色进行游戏");
        System.out.println("1.孙权");
        System.out.println("2.刘备");
        System.out.println("3.曹操");
        System.out.println("请输入所选角色对应的数字");
        try{
        Scanner enter = new Scanner(System.in);
            int playernum1  = enter.nextInt();
            Myexception.compute(playernum1);
             break;
        }catch(Exception ex){
        System.out.println("请从1~3中选择输入数字!!!!");
        continue;
        }catch(Myexception ex)
        {
        System.out.println("请从1~3中选择输入数字!!!!");
        continue;
        }
       }while(true);    }
}

解决方案 »

  1.   

    问题1: 
    class Myexception extends Exception
    你仅仅有一个默认构造器,无法在打印异常时给予更多的信息;应该定义下几个标准的构造器;问题2:
    你为什么要在异常中定义决定是否抛出这个异常的方法?感觉看起来很奇怪,好像没有见过这个搞法,虽然可以。我自己认为异常就是定义异常的,不是自身去判断是否抛出自己;个人的一些见解。
      

  2.   

    package snake;import java.util.Scanner;public class GuessFist {    public static void main(String[] args) {
    System.out.println("欢迎来到猜拳游戏");
    System.out.println("------------------------");
    do {
        System.out.println("请选择一个角色进行游戏");
        System.out.println("1.孙权");
        System.out.println("2.刘备");
        System.out.println("3.曹操");
        System.out.println("请输入所选角色对应的数字");
        try {
    Scanner enter = new Scanner(System.in);
    int playernum1 = enter.nextInt();
    Myexception.compute(playernum1);
    break;
        } catch (Myexception ex) {
    System.out.println("请从1~3中选择输入数字----!!!!");
    continue;
        } catch (Exception ex) {
    System.out.println("请从1~3中选择输入数字!!!!");
    continue;
        }
    } while (true);    }
    }class Myexception extends Exception {
        public static void compute(int a) throws Myexception {
    /*if (a != 1 || a != 2 || a != 3) {
        throw new Myexception();
    }*/
    if (!(a == 1 || a == 2 || a == 3)) {
        throw new Myexception();
    }//如果是int型的数,但不是1,2,3     }
    }
      

  3.   

    将两个catch的位置换一下,先catch Myexception再catch Exception 
      

  4.   

    如4楼所说,LZ你应该将你CATCH语句块换一下,你先扑捉了所有了异常,再来捕捉小的有意义吗?在自定义异常中构造的时候一般会初始化一些参数的!
      

  5.   

    将两个catch的位置换一下,先catch Myexception再catch Exception