14

ユーザーの生年月日を取得し、最大および目標心拍数を返す「HeartRates」というクラスを実装する最初の Java プロジェクトに取り組んでいます。メインのテスト プログラムはすべて機能しますが、例外がキャッチされた後に残りのコードの出力を停止する方法がわかりません。

教授が私たちに与えたものからコピーして貼り付けたため、例外がキャッチされたコード全体についてはよくわかりません。エラーが発生した後にプログラムを終了する方法、またはカスタムエラーメッセージを出力してプログラムの実行を停止する方法を誰かに教えていただければ幸いです。

コードは次のとおりです。

 import java.util.Scanner;
 import java.util.GregorianCalendar;

 import javax.swing.JOptionPane;

 public class HeartRatesTest {

public static void main(String[] args) {
    HeartRates test= new HeartRates();
    Scanner input = new Scanner( System.in );
    GregorianCalendar gc = new GregorianCalendar();
    gc.setLenient(false);

        JOptionPane.showMessageDialog(null, "Welcome to the Heart Rate Calculator");;
        test.setFirstName(JOptionPane.showInputDialog("Please enter your first name: \n"));
        test.setLastName(JOptionPane.showInputDialog("Please enter your last name: \n"));
        JOptionPane.showMessageDialog(null, "Now enter your date of birth in Month/Day/Year order (hit enter after each): \n");

        try{
            String num1= JOptionPane.showInputDialog("Month: \n");
            int m= Integer.parseInt(num1);
            test.setMonth(m);
                gc.set(GregorianCalendar.MONTH, test.getMonth());
            num1= JOptionPane.showInputDialog("Day: \n");
            m= Integer.parseInt(num1);
            test.setDay(m);
                gc.set(GregorianCalendar.DATE, test.getDay());
            num1= JOptionPane.showInputDialog("Year: \n");
            m= Integer.parseInt(num1);
            test.setYear(m);
                gc.set(GregorianCalendar.YEAR, test.getYear());

                gc.getTime(); // exception thrown here
        }

        catch (Exception e) {
            e.printStackTrace();
            }   



    String message="Information for "+test.getFirstName()+" "+test.getLastName()+": \n\n"+"DOB: "+ test.getMonth()+"/" +test.getDay()+ "/" 
            +test.getYear()+ "\nAge: "+ test.getAge()+"\nMax Heart Rate: "+test.getMaxHR()+" BPM\nTarget Heart Rate(range): "+test.getTargetHRLow()
            +" - "+test.getTargetHRHigh()+" BPM";
    JOptionPane.showMessageDialog(null, message);
}
4

3 に答える 3

18

例外がキャッチされた後にアプリケーションを終了する必要がある理由がよくわかりません。

いずれにせよ、あなたのキャッチブロックで:

catch(Exception e) {
    e.printStackTrace(); //if you want it.
    //You could always just System.out.println("Exception occurred.");
    //Though the above is rather unspecific.
    System.exit(1);
}
于 2012-06-09T21:50:12.747 に答える
13

return がこのプログラムの実行を停止する (メインにある) ことは事実です。より一般的な答えは、メソッドで特定のタイプの例外を処理できない場合、その例外をスローすることを宣言するか、何らかの種類の RuntimeException で例外をラップして上位層にスローする必要があります。

System.exit() も技術的には機能しますが、より複雑なシステムの場合は避ける必要があります (呼び出し元が例外を処理できる場合があります)。

tl;dr バージョン:

catch(Exception e)
{
    throw new RuntimeException(e);
}
于 2012-06-09T21:56:52.960 に答える
12

catchブロックで、次のキーワードを使用しますreturn

catch(Exception e)
{
    e.printStackTrace();
    return; // also you can use System.exit(0);
}

JOptionPane.showMessageDialogまたは、最後をtryブロックの最後に置きたいかもしれません。

于 2012-06-09T21:49:25.223 に答える