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