java如何打印当前月份日历_java-从给定的月份/年份打印日历

我正在处理Java作业,它涉及在用户指定月份和年份之后打印日历.我不能使用Calendar或GregorianCalendar类.我的问题是日历在星期六的第一天无法正确打印月份.我已经看了大约一个小时的代码,但不确定发生了什么问题.我正在使用Zeller的Congruence查找以“ h”表示的每月的第一天.

例如,2008年3月的日历(错误地)如下所示:

March 2008

Su Mo Tu We Th Fr Sa

1

2 3 4 5 6 7 8

9 10 11 12 13 14 15

16 17 18 19 20 21 22

23 24 25 26 27 28 29

30 31

这是我的代码:

package calendar;

import java.util.Scanner;

public class Calendar

{

private static int numDays = 0;

private static int h = 0;

public static boolean leap(int year)

{

if(((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))

{

return true;

}

else

{

return false;

}

}

public static void firstDayOfYear(int year)

{

int month = 13;

year--;

h = (1 + (int)(((month + 1) * 26) / 10.0) + year + (int)(year / 4.0) + 6 * (int)(year / 100.0) + (int)(year / 400.0)) % 7;

String dayName = "";

switch(h)

{

case 0: dayName = "Saturday"; break;

case 1: dayName = "Sunday"; break;

case 2: dayName = "Monday"; break;

case 3: dayName = "Tuesday"; break;

case 4: dayName = "Wednesday"; break;

case 5: dayName = "Thursday"; break;

default: dayName = "Friday"; break;

}

System.out.println("The first day of the year is " + dayName);

}

public static void firstDayOfMonth(int month, int year)

{

if(month == 1 || month == 2)

{

month += 12;

year--;

}

h = (1 + (int)(((month + 1) * 26) / 10.0) + year + (int)(year / 4.0) + 6 * (int)(year / 100.0) + (int)(year / 400.0)) % 7;

String dayName = "";

switch(h)

{

case 0: dayName = "Saturday"; break;

case 1: dayName = "Sunday"; break;

case 2: dayName = "Monday"; break;

case 3: dayName = "Tuesday"; break;

case 4: dayName = "Wednesday"; break;

case 5: dayName = "Thursday"; break;

default: dayName = "Friday"; break;

}

System.out.println("The first day of the month is " + dayName);

}

public static void numDaysInMonth(int month, int year)

{

int[] days = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

if (month == 2 && leap(year)) days[month] = 29;

numDays = days[month];

System.out.println("The number of days in the month is " + numDays);

}

public static void printCal(int month, int year)

{

String[] monthNames = {"","January","February","March","April","May","June","July","August","September","October","November","December"};

System.out.println(" " + monthNames[month] + " " + year);

System.out.println("Su Mo Tu We Th Fr Sa");

for (int i = 0; i < h - 1; i++)

System.out.print(" ");

for (int i = 1; i <= numDays; i++)

{

System.out.printf("%2d ", i);

if (((i + h - 1) % 7 == 0) || (i == numDays)) System.out.println();

}

}

public static void main(String[] args)

{

Scanner input = new Scanner(System.in);

System.out.print("Enter month (1-12): ");

int month = input.nextInt();

if(month < 1 || month > 12)

{

System.out.println("Invalid month. Valids inputs are 1-12.");

System.exit(0);

}

System.out.print("Enter year: ");

int year = input.nextInt();

if(year < 1753)

{

System.out.println("Invalid year. Valid inputs are 1753 and beyond.");

System.exit(0);

}

if(leap(year))

{

System.out.println(year + " is a leap year.");

}

else

{

System.out.println(year + " is NOT a leap year.");

}

firstDayOfYear(year);

firstDayOfMonth(month, year);

numDaysInMonth(month, year);

printCal(month, year);

}

}

解决方法:

for (int i = 0; i < h - 1; i++)

System.out.print(" ");

在这里将h设置为7而不是0将为您解决问题.您可以在此处解决此问题,或者可能需要将h从1改为7,而不是0到6,然后进行其他必要的更改.

标签:java,calendar

来源: https://codeday.me/bug/20191012/1903167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值