我将在月底之前完成这项任务,而且我已经完成了一半。我们不得不使用Zeller的同余来计算第一天登陆的那一天。从那时起(并考虑闰年),您必须使用循环打印相应年份的日历。老师说这应该是一个非常简短的程序,我们不应该试图强制程序的逻辑(基本上,不要每个月使用一堆if else和循环)。 我已经有了数学计算和闰年部分 ,但我无法理解如何使这个for循环工作有多种原因:
例如,我刚刚开始写一个for循环,看看我是否可以打印一个典型的31天日历没有任何特殊格式(空格,月份名称,日期等)。这是我使用for循环的第一个测试:
for(int i = 1; i < 31; i++)
{
for(int j = 0; j < 7; j++)
{
System.out.print(i + "\t");
i++;
if(j == 6){
i--;}
if(i > 31)
{
break;
}
}
System.out.print("\n");
}
将它用于多个月和空白的逻辑是什么?我欢迎所有帮助,但请不要给我源代码。我希望用我编写的代码完成这项工作,并且就像我说的那样,这也是一项任务,我不会真正学习复制和粘贴代码。请告诉我一个关于我需要使用的逻辑的问题。对于特殊情况,我可以在所有其他条件下工作。谢谢你们。
答案 0 :(得分:1)
好的,您需要管理一组固定值之间的变化,因此您基本上需要一种方法来从循环中访问这些变量数据。
解决此问题的最佳工具可能是数组。
如果你存储在一个数组中,例如几个月的持续时间,你将能够以一种简单的方式(通过索引)访问它们,这样你就不需要任何条件链,你只需要索引当月,例如monthDurations[i] == 31
。
如果您想要更好地构建所有内容,您可以定义自己的Month
类或Day
类或任何您需要的内容来跟踪打印问题(例如空格或名称),以便一切都将是易于封装和维护。
答案 1 :(得分:1)
我会写一个函数来显示一个月的参数:dayOfWeek,numberOfDays,[name,firstDayOfWeek]
可选参数如果您愿意,可以实施
逻辑很简单你可以只使用一个迭代numberOfDays + dayOfWeek-1次的循环。 在你内部你只需要检查一周的结束,以便在第一周内创建新行并在dayOfWeek-1次显示空格。