1

カスタムメイドの例外を実行しましたが、それが正しいかどうかはわかりません。また、例外の場合、プログラムが例外のメッセージを出力せず、カスタム例外のクラス名のみを出力する理由もわかりません。 、また、例外が発生した場合、プログラムは例外について通知して続行するだけなので、プログラムを終了するにはどうすればよいですか。プログラムはEclipseでコンパイルおよび実行されています。みんな乾杯。これがコードです。

import java.util.Scanner;
public class Stud
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter age of the student");
        int age = input.nextInt();
        try
        {
                if(age < 7 || age > 18)
                {   
                    throw new InvalidStudentException("Age can't be less than 7 and more than 18");
                }
        }
        catch(InvalidStudentException e)
        {
                System.err.println(e) ;
        }

        System.out.println("Enter the gender of the student");
        String gender = input.next();
        try
        {
            if((!gender.equals("male")) || (!gender.equals("female")))
            {
                throw new InvalidStudentException("Gender can be only male or female");
            }
        }catch(InvalidStudentException e)
        {
            System.err.println(e) ;
        }

        System.out.println("Enter the name of the student");
        String name = input.next();
        try
        {


            if(name.length() < 10 || name.length() > 50)
            {
                throw new InvalidStudentException("The length of the name must be greater than 10 and less than 50 characters");
            }
        }catch(InvalidStudentException e)
        {
            System.err.println(e) ;
        }

        System.out.println("Enter the class number for the student");
        int classNumber = input.nextInt();

        try
        {
            if(classNumber < 1 || classNumber > 11)
            {
                throw new InvalidStudentException("Class number can be only between 1 and 11");
            }
        }catch(InvalidStudentException e)
        {
            System.err.println(e) ;
        }
    }
}

/** the class with the custom made exception
 */
public class InvalidStudentException extends Exception
{
    String msg;
    int num;

     public InvalidStudentException() 
     {
         super();
     }

     public InvalidStudentException(String msg) 
     {
         super();
         this.msg = msg;
     }
     public InvalidStudentException(int num) 
     {
         super();
         this.num = num;
     }
}
4

4 に答える 4

2

性別が男性でも女性でもない場合は例外を発生させる必要があるため、コードを次のように変更します。

try
    {
        if((!gender.equals("male")) && (!gender.equals("female")))
        {
            throw new InvalidStudentException("Gender can be only male or female");
        }
    }catch(InvalidStudentException e)
    {
        System.err.println(e.getMessage()) ;
        System.exit(0);
    }

&&代わりに注意してください||

于 2012-06-14T05:49:54.790 に答える
2

ExceptionクラスでtoString()メソッドをオーバーライドします

@Override
 public String toString()
 {
     return this.msg.toString();
 }

スタックトレースを出力するかどうかは別の質問です。

于 2012-06-14T05:53:07.037 に答える
1

あなたは例外をキャッチしているので、プログラムは例外的な場合にも進みます。throwあなたはキャッチブロックからそれを使用して再スローするか、使用することができますSystem.exit()

例外の詳細を印刷するには

使用する

e.printStackTrace()

それ以外のSystem.out.println(e);


も参照してください

于 2012-06-14T05:36:08.183 に答える
1

これを試して

    try
    {
        if((!gender.equals("male")) || (!gender.equals("female")))
        {
            throw new InvalidStudentException("Gender can be only male or female");
        }
    }catch(InvalidStudentException e)
    {
        System.err.println(e.getMessage()) ;
        System.exit(0);
    }
于 2012-06-14T05:38:58.040 に答える