从个人 "if's" 中创建一个 long/big "if"
Creating one long/big "if" out of individual "if's"
我接到了一项大学任务,它是创建一个程序,用户将在其中输入日期,程序将 return 一个与该特定日期对应的数值。
必须考虑 3 件事:
在 1752 年 9 月 3 日之前,有一个用于生成数值的方程式。然而....
1752 年 9 月 13 日之后,日历被更改为更准确地表示一年中的天数,因此使用不同的等式来表示这些日期。
最后,在 1752 年 9 月 3 日到 13 日之间,程序应该 return 这些日期根本不存在,因为日历的更改跳过了中间的日子。
我有一个 if 语句,我想成为一个大条件而不是单独的条件:
if (yyyy <= 1752 && mm <= 9 && dd < 3)
但问题是,如果我选择 1752 年 的日期,即 第 9 个月 或之前的日期,并且有一天 高于 3,则不会 return 编辑答案。因此 (dd/mm/yyyy) >3/January-August/1752 不会 return 一个答案。
剩下的代码如果有人想弄乱 it/test 东西:
public static void main(String[] args) {
System.out.print("Please enter your desired date(dd/mm/yyyy): ");
String date = new Scanner(System.in).nextLine();
int d1 = (date.charAt(0)-48)*10;
int d2 = date.charAt(1)-48;
int dd = d1+d2;
int m1 = (date.charAt(3)-48)*10;
int m2 = date.charAt(4)-48;
int mm = m1+m2;
int y1 = (date.charAt(6)-48)*1000;
int y2 = (date.charAt(7)-48)*100;
int y3 = (date.charAt(8)-48)*10;
int y4 = date.charAt(9)-48;
int yyyy = y1+y2+y3+y4;
if (dd <= 13 && dd >= 3 && mm == 9 && yyyy == 1752){
System.out.println("This date never occured.");
} if (dd > 13 && mm >= 9 && yyyy >= 1752 || yyyy>1752){
{
while(true){
if (dd > 31){
System.out.println("This is not a valid day.");
dd = new Scanner(System.in).nextInt();
}
if (mm > 12){
System.out.println("This is not a valid month.");
mm = new Scanner(System.in).nextInt();
}
if (mm == 1){
mm = 13;
}
if (mm== 2){
mm = 14;
}
else{
int answer;
answer = (dd +((26*(mm+1))/10)+yyyy+(yyyy/4)+6*(yyyy/100)+(yyyy/400))%7;
System.out.println("\n");
System.out.println("The day was/is: "+answer);
System.out.println("Sa: 0, Su: 1, M: 2, Tu: 3, W: 4, Th: 5, F: 6");
break;
}
}
}
}
if ((yyyy <= 1752 && mm <= 9 && dd < 3) || yyyy < 1752){
{
while(true){
if (dd > 31){
System.out.println("This is not a valid day.");
dd = new Scanner(System.in).nextInt();
}
if (mm > 12){
System.out.println("This is not a valid month.");
mm = new Scanner(System.in).nextInt();
}
if (mm == 1){
mm = 13;
}
if (mm== 2){
mm = 14;
}
else{
int answer;
answer = (dd+(26*(mm+1)/10)+yyyy+(yyyy/4)+5)%7;
System.out.println("\n");
System.out.println("The day was/is: "+answer);
System.out.println("Sa: 0, Su: 1, M: 2, Tu: 3, W: 4, Th: 5, F: 6");
break;
}
}
}
}
}
}
感谢任何帮助:3 谢谢!
您需要有 3 个分支,对于第一个分支,它应该是这样的:
Before the 3rd of September 1752 there is an equation that is used to generate a numerical value.
if (yyyy < 1752 || // year is before 1752, so it obviously matches
(yyyy == 1752 && // year is 1752, but we have to determine month
(mm < 9 // month is before sept
|| (mm == 9 && dd < 3) // month is sept, but before the 3rd.
)
)
){
}
对第二种情况使用相同类型的逻辑,然后 ELSE 语句将捕获第三种情况中的所有其他内容。
注意:我没有对此进行测试,根据您的代码,可能是 mm 或 dd 偏移了 1。
If(yyyy <= 1752)
{
If(yyyy==1752)
{
If(mm<=09)
{
If(mm==09)
{
If(dd >3 && dd<13)
Print("Date never occurred.");
Else if(dd<3)
Equation1(date);
Else
Equation2(date);
}
Else
Equation1(date);
}
else
{
Equation2(date);
}
}
else
Equation1(date);
}
Else
{
Equation2(date);
}
我试了一个伪代码,它可能对你有帮助。
我接到了一项大学任务,它是创建一个程序,用户将在其中输入日期,程序将 return 一个与该特定日期对应的数值。
必须考虑 3 件事:
在 1752 年 9 月 3 日之前,有一个用于生成数值的方程式。然而....
1752 年 9 月 13 日之后,日历被更改为更准确地表示一年中的天数,因此使用不同的等式来表示这些日期。
最后,在 1752 年 9 月 3 日到 13 日之间,程序应该 return 这些日期根本不存在,因为日历的更改跳过了中间的日子。
我有一个 if 语句,我想成为一个大条件而不是单独的条件:
if (yyyy <= 1752 && mm <= 9 && dd < 3)
但问题是,如果我选择 1752 年 的日期,即 第 9 个月 或之前的日期,并且有一天 高于 3,则不会 return 编辑答案。因此 (dd/mm/yyyy) >3/January-August/1752 不会 return 一个答案。
剩下的代码如果有人想弄乱 it/test 东西:
public static void main(String[] args) {
System.out.print("Please enter your desired date(dd/mm/yyyy): ");
String date = new Scanner(System.in).nextLine();
int d1 = (date.charAt(0)-48)*10;
int d2 = date.charAt(1)-48;
int dd = d1+d2;
int m1 = (date.charAt(3)-48)*10;
int m2 = date.charAt(4)-48;
int mm = m1+m2;
int y1 = (date.charAt(6)-48)*1000;
int y2 = (date.charAt(7)-48)*100;
int y3 = (date.charAt(8)-48)*10;
int y4 = date.charAt(9)-48;
int yyyy = y1+y2+y3+y4;
if (dd <= 13 && dd >= 3 && mm == 9 && yyyy == 1752){
System.out.println("This date never occured.");
} if (dd > 13 && mm >= 9 && yyyy >= 1752 || yyyy>1752){
{
while(true){
if (dd > 31){
System.out.println("This is not a valid day.");
dd = new Scanner(System.in).nextInt();
}
if (mm > 12){
System.out.println("This is not a valid month.");
mm = new Scanner(System.in).nextInt();
}
if (mm == 1){
mm = 13;
}
if (mm== 2){
mm = 14;
}
else{
int answer;
answer = (dd +((26*(mm+1))/10)+yyyy+(yyyy/4)+6*(yyyy/100)+(yyyy/400))%7;
System.out.println("\n");
System.out.println("The day was/is: "+answer);
System.out.println("Sa: 0, Su: 1, M: 2, Tu: 3, W: 4, Th: 5, F: 6");
break;
}
}
}
}
if ((yyyy <= 1752 && mm <= 9 && dd < 3) || yyyy < 1752){
{
while(true){
if (dd > 31){
System.out.println("This is not a valid day.");
dd = new Scanner(System.in).nextInt();
}
if (mm > 12){
System.out.println("This is not a valid month.");
mm = new Scanner(System.in).nextInt();
}
if (mm == 1){
mm = 13;
}
if (mm== 2){
mm = 14;
}
else{
int answer;
answer = (dd+(26*(mm+1)/10)+yyyy+(yyyy/4)+5)%7;
System.out.println("\n");
System.out.println("The day was/is: "+answer);
System.out.println("Sa: 0, Su: 1, M: 2, Tu: 3, W: 4, Th: 5, F: 6");
break;
}
}
}
}
}
}
感谢任何帮助:3 谢谢!
您需要有 3 个分支,对于第一个分支,它应该是这样的:
Before the 3rd of September 1752 there is an equation that is used to generate a numerical value.
if (yyyy < 1752 || // year is before 1752, so it obviously matches
(yyyy == 1752 && // year is 1752, but we have to determine month
(mm < 9 // month is before sept
|| (mm == 9 && dd < 3) // month is sept, but before the 3rd.
)
)
){
}
对第二种情况使用相同类型的逻辑,然后 ELSE 语句将捕获第三种情况中的所有其他内容。
注意:我没有对此进行测试,根据您的代码,可能是 mm 或 dd 偏移了 1。
If(yyyy <= 1752)
{
If(yyyy==1752)
{
If(mm<=09)
{
If(mm==09)
{
If(dd >3 && dd<13)
Print("Date never occurred.");
Else if(dd<3)
Equation1(date);
Else
Equation2(date);
}
Else
Equation1(date);
}
else
{
Equation2(date);
}
}
else
Equation1(date);
}
Else
{
Equation2(date);
}
我试了一个伪代码,它可能对你有帮助。