import javax.swing.JOptionPane;
public class Calendar31 {
static String strDays = " %2d ";
public static void main(String[] args) {
String getYear = JOptionPane.showInputDialog(null, "Enter Year to Show: ");
int year = Integer.parseInt(getYear);
String startingDay = JOptionPane.showInputDialog(null, "Enter Starting Day (0 = Sunday, 6 = Saturday): ");
int startDay = Integer.parseInt(startingDay);
String[] months = new String[12];
months[0] = "January";
months[1] = "February";
months[2] = "March";
months[3] = "April";
months[4] = "May";
months[5] = "June";
months[6] = "July";
months[7] = "August";
months[8] = "September";
months[9] = "October";
months[10] = "November";
months[11] = "December";
for (int y = 0; y <= 11; y++) {
System.out.println(" " + months[y] + " " + year);
System.out.println("---------------------------------");
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
for (int x = 0; x < startDay; x++){
System.out.print(" ");
}
for (int d = 1; d <= getNumDays(1, year); d++){
System.out.printf(strDays, d);
if ((d + startDay) % 7 == 0){
System.out.println();
}
}
System.out.println();
System.out.println();
}
}
public static boolean isLeapYear(int year){
return ((year % 4 == 0)&& (year % 100 != 0)) || (year % 400 == 0);
}
public static int getNumDays(int m, int year) {
int[] numDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int retval = numDays[m-1];
if ((m == 2) && (isLeapYear(year))){
retval++;
}
return retval;
}
}
所以,我有这个代码。该项目是根据你输入的年份和第一个月的开始日制作一个显示年历的java程序...另一种确定闰年的方法因为很久以前的一些白痴决定我们需要额外的1 /一年中的4天...这样当月份是第二个月时就能正常工作。在那个方法中,有12个条目的数组,其中12个是Jan,Feb,Mar,依此类推。现在,在代码的主要代码块中,有一行:
for (int d = 1; d <= getNumDays(1, year); d++) {
其中1是,在getNumDays中从数组中提取第一个int ...由于某种原因,我无法弄清楚我哪里出错了,但是1需要消失,取而代之的是我们需要'm' ,如getNumDays中所定义。但无论我怎么解释不了所需的语法......我确信这很简单。有任何快速帮助吗?谢谢!
答案 0 :(得分:1)
也许我错过了一些东西,但你不能只改变&#34; 1&#34;你参考&#34; y&#34;?如:
for (int d = 1; d <= getNumDays(y, year); d++){
毕竟,外部循环从0到11计数,并将值赋给y。然后,您可以使用该值来调用getNumDays函数并返回月中的正确天数&#34; y&#34;。
此外,您可能需要考虑使用制表符而不是预定义数量的空格。这将确保您的列排列。例如:
System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
for (int x = 0; x < startDay; x++){
System.out.print("\t");
}