首页 / JAVA / java-从给定的月份/年份打印日历
java-从给定的月份/年份打印日历
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-从给定的月份/年份打印日历,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3439字,纯文字阅读大概需要5分钟。
内容图文
![java-从给定的月份/年份打印日历](/upload/InfoBanner/zyjiaocheng/691/db72eab7360e4507b04d987c33625e05.jpg)
我正在处理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);
}
}
解决方法:
您的代码对于every month that starts with a Saturday将会有相同的问题.这意味着问题可能在此行中-
for (int i = 0; i < h - 1; i++)
System.out.print(" ");
在这里将h设置为7而不是0将为您解决问题.您可以在此处解决此问题,或者可能需要将h从1改为7,而不是0到6,然后进行其他必要的更改.
内容总结
以上是互联网集市为您收集整理的java-从给定的月份/年份打印日历全部内容,希望文章能够帮你解决java-从给定的月份/年份打印日历所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。