java - 从各个 "if"s 中创建一个长/大 "if'”

标签 java if-statement conditional-statements gregorian-calendar

我收到了一项大学任务,它是创建一个程序,用户在其中输入日期,程序将返回与该特定日期的日期相对应的数值。

必须考虑三件事:

  • 1752 年 9 月 3 日之前有一个方程式用于生成数值。然而......

  • 1752 年 9 月 13 日之后,日历发生更改,以便更准确地表示一年中的天数,因此使用不同的方程来表示这些日期。

  • 最后,在 1752 年 9 月 3 日到 13 日之间,程序应该返回这些日期根本不存在,因为日历的更改跳过了中间的日子。

我有一个 if 语句,我想成为一个大条件而不是单独的条件:

if (yyyy <= 1752 && mm <= 9 && dd < 3)

但问题是,如果我选择1752年的日期,即9月或之前,并且有一天>高于3,将不返回答案。因此 (dd/mm/yyyy) >3/January-August/1752 将不会返回答案。

如果有人想乱搞/测试一些东西,剩下的代码:

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。

关于java - 从各个 "if"s 中创建一个长/大 "if'”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375462/

相关文章:

java - 如何避免 Java 中的数组越界异常

python - 需要知道如何循环

python - 如何在Python中使用正则表达式搜索特定单词?

conditional-statements - Gnuplot 条件绘图

循环中的 R 条件格式

java - TableView 自动调整行高大小 - JavaFX

java - JSF:如何检查图像是否可以有效显示

java - 在 for 循环条件中使用 string.length() 比初始化为此的局部变量更好,为什么?

java - Map仅在java中返回最后的数据

c - 了解程序集中的条件代码标志设置