为什么会出现另一种方法的错误消息?

时间:2011-10-26 23:13:29

标签: 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();
}
}

当我在第一种方法中导致错误时,会出现第二个错误。有谁知道是什么原因引起的?或者我做错了什么?如果用户输入除整数之外的任何内容,它应该捕获错误。也有人知道如何在错误生效时为每个方法设置一个循环吗?

4 个答案:

答案 0 :(得分:3)

据我所知,caldate1将始终返回错误案例。除非另有说明,否则int被初始化为0,因此if (t1 > j)的条件将始终归结为if (0 > 693502),这将永远不会成立,因此始终会导致错误情况。 t1仅在该条件成立时才设置(不会)。

来自date1的错误可能不会按预期显示,因为scanner.nextLine()语句将在继续执行之前等待用户输入。

答案 1 :(得分:2)

在为其分配值之前,您正在测试t1的值。

答案 2 :(得分:1)

在重新格式化代码时我注意到的一件事是,在上一个if else复合语句的末尾有一个分号,后跟一个为t1赋值的隔离块。我怀疑您希望t1分配仅在满足else if条件时发生。

这就是为什么要特别注意你的代码风格。当你这么做的时候,像你这样的小事会跳出来。

答案 3 :(得分:0)

首先:

m1 == 4 + 6 + 9 + 11等于m1 == 30。我认为你的意思是m1 == 4 || m1 == 6 || m1 == 9 || m1 == 11

其次:

此行if (t1 > j)永远不会成立,因为您从未设置t1,因此它为零,零不能大于693502.