代码之家  ›  专栏  ›  技术社区  ›  Jay.

Java基本计算

  •  0
  • Jay.  · 技术社区  · 6 年前

    我试图解决这个涉及到一些计算的基本问题。但我的计算结果不同。(它返回6,使用示例中给出的输入,它应该返回1(星期日)。

    问题是:

    enter image description here

    Scanner sc = new Scanner(System.in);
    
    System.out.println("Enter year: (e.g., 2012): ");
    int year = sc.nextInt();
    
    System.out.println("Enter month: 1-12: ");
    int month = sc.nextInt();
    
    System.out.println("Enter the day of the month: 1-31: ");
    int day = sc.nextInt();
    
    //calculate the day using the forumla
    int k = year % 100;
    int j = year / 100;
    
    int weekDay = (int)((day + ( 26 * (month + 1))/10.0 + k + k/4.0 + j/4.0 + (5*j)) % 7);
    
    3 回复  |  直到 6 年前
        1
  •  4
  •   Andreas dfa    6 年前

    如果你查一下Zeller的同余,例如 Wikipedia ,你会发现你应该用整数来计算,因为那些除法结果应该是下限的。

    m 全部。正如维基百科所说:

    注: 在这个算法中 1月和2月计算为上一年的第13个月和第14个月

    这个 粗体 部分也正是你的作业所说的。

        2
  •  1
  •   Eritrean    6 年前

    因此,如果输入的月份是1月或2月,您需要添加一些检查。

    Scanner sc = new Scanner(System.in);
    
    System.out.println("Enter year: (e.g., 2012): ");
    int year = sc.nextInt();
    
    System.out.println("Enter month: 1-12: ");
    int month = sc.nextInt();
    if(month < 3){
        month += 12;
        year -= 1; 
    }
    
    System.out.println("Enter the day of the month: 1-31: ");
    int day = sc.nextInt();
    
    //calculate the day using the forumla
    int k = year % 100;
    int j = year / 100;
    int weekDay =  (day + (26 * (month + 1)) / 10 + k + k / 4 + j / 4 + (5 * j)) % 7;
    System.out.println(weekDay);
    
        3
  •  0
  •   Cerenia    6 年前

    罗纳德在评论中指出 4.0 4 相反(没有小数点)。将int转换添加到整个公式中只会在计算完所有内容后转换回int,但您希望在整个计算过程中使用整数除法,以使此公式工作。