別のメソッドからエラーメッセージが表示されるのはなぜですか?

java
別のメソッドからエラーメッセージが表示されるのはなぜですか?
import java.util.Scanner;
import java.util.InputMismatchException;

public class backup {
public static int t1;
public static int t2;
public static int x;
public static int y1;
public static int m1;
public static int d1;
public static int y2;
public static int m2;
public static int d2;

public static void date1() {

        Scanner scanner = new Scanner(System.in);
        try {
            System.out.println("Please enter the first date ");
            System.out.println("Please enter the year: ");
            y1 = scanner.nextInt();

            System.out.println("Please enter the month: ");
            m1 = scanner.nextInt();

            System.out.println("Please enter the day: ");
            d1 = scanner.nextInt();
        } catch (InputMismatchException inputMismatchException)
        {
            scanner.nextLine();
            System.err.println("You must enter intergers. Please try again. "); }
        }
public static void caldate1() {
    int j = 693502;
    if (t1 > j) {

        if (m1 == 1 + 3 + 5 + 7 + 8 + 10 + 12) {
            t1 = ((365 * y1) + d1 + 31);
        } else if (m1 == 2) {
            t1 = ((365 * y1) + d1 + 28);
        } else if (m1 == 4 + 6 + 9 + 11)
            ;
        {
            t1 = ((365 * y1) + d1 + 30);
        }
        }
    else {
        System.err.printf("Error. Please enter a date after Jan 1st 1900.\n");
        }
        }
public static void main(String[] args) {

date1();
caldate1();
}
}

最初の方法でエラーが発生すると、2番目のエラーが表示されます。 誰がこれを引き起こす可能性があるか知っていますか? または私が間違っているのは何ですか? ユーザーが整数以外を入力した場合、エラーをキャッチする必要があります。 また、エラーが発生したときに各メソッドにループを設定する方法を知っていますか?

  0  0


ベストアンサー

私が知る限り、 `caldate1`は常にエラーケースを返します。 特に指定しない限り、intは0に初期化されます。したがって、if(t1> j)の条件は常にif(0> 693502)になります。場合。 `t1`は、その条件が当てはまる場合にのみ設定されます(そうでない場合)。

`scanner.nextLine()`ステートメントは実行を続ける前にユーザー入力を待つため、 `date1`からのエラーはおそらく期待どおりに表示されません。

3


値を割り当てる前に、t1の値をテストしています。

2


コードの再フォーマット中に気付いたことの1つは、最後の「if else」複合ステートメントの最後にセミコロンがあり、その後にt1に値を割り当てる分離ブロックが続くことです。 else if`条件が満たされた場合にのみ、 t1`の割り当てが発生するようにしたいと思います。

これが、コードスタイルに注意を払うことが得策である理由です。 このようなささいなことはあなたがするときにあなたに飛び出します。

1


まず、

「m1 == 4 + 6 + 9 + 11」は「m1 == 30」と同じです。 あなたは m1 == 4 || m1 == 6 || m1 == 9 || m1 == 11

第二に:

この行「if(t1> j)」は決して真ではありません。「t1」を設定したことがないため、ゼロであり、ゼロは693502より大きくすることはできません。

0


タイトルとURLをコピーしました