gpt4 book ai didi

java - 如何根据用户输入在java中格式化日历

转载 作者:行者123 更新时间:2023-12-01 23:58:09 25 4
gpt4 key购买 nike

我有一个作业,我必须询问用户月份、年份以及该月份的开始日期,并打印出该特定年份的该特定月份的日历。除了周日的列完全空白之外,我的代码运行良好。

我尝试过包含选择语句来确定每列的间距,但最终一周实际上还是 6 天,而不是 7 天。

import java.util.Scanner;

public class MonthCalendar {
// method for determining # of days
public static int numOfDays(int month, int year) {
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (isLeap(year))
numDays = 29;
else
numDays = 28;
break;
}
return numDays;
}

// determine if leap year
public static Boolean isLeap(int year) {
if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
return true;
else
return false;
}

// get month name from user int
public static String getMonthName(int month) {
String monthName = "j";
switch (month) {
case 1:
monthName = "January";
break;
case 2:
monthName = "February";
break;
case 3:
monthName = "March";
break;
case 4:
monthName = "April";
break;
case 5:
monthName = "May";
break;
case 6:
monthName = "June";
break;
case 7:
monthName = "July";
break;
case 8:
monthName = "August";
break;
case 9:
monthName = "September";
break;
case 10:
monthName = "October";
break;
case 11:
monthName = "November";
break;
case 12:
monthName = "December";
break;
}
return monthName;
}

public static void main(String[] args) {
//prompt user for month, year, and day
Scanner input = new Scanner(System.in);
System.out.println("Enter month (number), year, and day of the first date (number): ");
System.out.println();
int month = input.nextInt();
int year = input.nextInt();
int day = input.nextInt();
int numDays = numOfDays(month, year);

// print heading
System.out.println("\t\t" + getMonthName(month) + " " + year);
System.out.println("---------------------------------------------------");
System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat");

// determine starting day of the week
day %= 7;
for (int b = 0; b <= day * 7; b++) {
System.out.print(" ");
}

// print calendar
for (int d = 1; d <= numOfDays(month, year); d++) {
// format for single digits to line up with the first digit of two digit #'s'
if (d < 10) {
System.out.print(" ");
}
// go to next line if at end of week
if (day % 6 == 0) {
System.out.print("\t" + d + "\n");
}
// normal formatting for other days
else {
System.out.print("\t" + d);
}
day++;
}

}
}

所需的输出(例如 2017 年 9 月)为

                      September 2017
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
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

但是我用我的代码得到的是

                      September 2017
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
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

最佳答案

您必须使用条件:if(day%7 == 0) 因为一周有 7 天,对吗?并且您必须使用 \t 进行格式化,如下所示:

import java.util.Scanner;

public class MonthCalendar {
// method for determining # of days
public static int numOfDays(int month, int year) {
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (isLeap(year))
numDays = 29;
else
numDays = 28;
break;
}
return numDays;
}

// determine if leap year
public static Boolean isLeap(int year) {
if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
return true;
else
return false;
}

// get month name from user int
public static String getMonthName(int month) {
String monthName = "j";
switch (month) {
case 1:
monthName = "January";
break;
case 2:
monthName = "February";
break;
case 3:
monthName = "March";
break;
case 4:
monthName = "April";
break;
case 5:
monthName = "May";
break;
case 6:
monthName = "June";
break;
case 7:
monthName = "July";
break;
case 8:
monthName = "August";
break;
case 9:
monthName = "September";
break;
case 10:
monthName = "October";
break;
case 11:
monthName = "November";
break;
case 12:
monthName = "December";
break;
}
return monthName;
}

public static void main(String[] args) {
//prompt user for month, year, and day
Scanner input = new Scanner(System.in);
System.out.println("Enter month (number), year, and day of the first date (number): ");
System.out.println();
int month = input.nextInt();
int year = input.nextInt();
int day = input.nextInt();
int numDays = numOfDays(month, year);

// print heading
System.out.println("\t\t\t" + getMonthName(month) + " " + year);
System.out.println("\t---------------------------------------------------");
System.out.println("\tSun\tMon\tTue\tWed\tThu\tFri\tSat");

// determine starting day of the week
day %= 7;
for (int b = 0; b <= day * 7; b++) {
System.out.print(" ");
}

// print calendar
for (int d = 1; d <= numOfDays(month, year); d++) {
// format for single digits to line up with the first digit of two digit #'s'
if (d < 10) {
System.out.print(" ");
}
// go to next line if at end of week
if (day % 7 == 0) {
System.out.print("\t" + d + "\n");
}
// normal formatting for other days
else {
System.out.print("\t" + d);
}
day++;
}

}
}

关于java - 如何根据用户输入在java中格式化日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com