2011-10-26 20 views
0
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

m1 == 4 + 6 + 9 + 11m1 == 30に等しいです。あなたがt1を設定したことがないので、本当のことはありません。このラインif (t1 > j)

ので、ゼロとゼロが693502.

より大きくすることはできません:私はあなたが第二 m1 == 4 || m1 == 6 || m1 == 9 || m1 == 11

を意味だと思います

2

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

3

私が言うことができる限り、caldate1は常にエラーの場合を返します。 intは特に指定しない限り0に初期化されるため、if (t1 > j)の状態は常にif (0 > 693502)になります。これは決して真実ではないため、常にエラーが発生します。 t1は、その条件が満たされている場合にのみ設定されます(そうでない場合)。

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

1

あなたのコードを再フォーマットしている間気づいたことの1つは、最後のif else複合ステートメントの最後にセミコロンがあり、その後にt1に値を割り当てる孤立したブロックが続くことです。私はelse ifの条件が満たされたときにのみt1割り当てが発生したいと思う。

これは、コードスタイルに注意を払うことをお勧めします。あなたがそうするとき、これのような小さな事柄はあなたに飛び出す。まず

関連する問題