以下是我的日历程序,如下所示:
public class calendar
{
public static void main (String args[])
{
new calendar ();
}
public calendar ()
{
int day = IBIO.inputInt ("Enter day: ");
int numOfDays = IBIO.inputInt ("Enter the number of days in the month: ");
System.out.println ("S M T W T F S");
if (day==1)
{
for (int i=1; i<=7; i++)
{
System.out.print (i + " ");
}
}
else if (day==2)
{
System.out.print (" ");
for (int i = 1; i <=6; i++)
{
System.out.print (i+" ");
}
}
else if (day==3)
{
System.out.print (" ");
for (int i = 1; i <=5; i++)
{
System.out.print (i+" ");
}
}
else if (day==4)
{
System.out.print (" ");
for (int i = 1; i <=4; i++)
{
System.out.print (i+ " ");
}
}
else if (day==5)
{
System.out.print (" ");
for (int i = 1; i <=3; i++)
{
System.out.print (i+" ");
}
}
else if (day==6)
{
System.out.print (" ");
for (int i = 1; i <=1; i++)
{
System.out.print (i + " ");
}
}
else
{
System.out.print (" ");
for (int i = 1; i <= 1; i++)
{
System.out.print (i+ " ");
}
}
}
}
现在我要做的是扩展到这个程序,因为只输出第一行。我想要整个月输出,这必须与用户通过变量numOfDays
输入的天数相对应。顺便说一句,IBIO.input
是用户存储输入的方式。
答案 0 :(得分:0)
根据我的理解,您试图通过将天数和开始日作为用户的输入来打印日历。
根据您编写的逻辑,它只会打印第一行,因为没有loop
或recursion
。您应该做的是使用loop
打印所有行。
以下是代码段:
public class calendar
{
public static void main (String args[])
{
new calendar ();
}
public calendar ()
{
int day = IBIO.inputInt ("Enter Day (Number): ");
int numOfDays = IBIO.inputInt ("Enter the number of days in the month: ");
StringBuilder sb = new StringBuilder();
System.out.println("S M T W T F S");
char[] spaces = new char[(day - 1) * 3];
Arrays.fill(spaces,' ');
sb.append(spaces);
for(int i = 1; i <= numOfDays; i++) {
if(sb.length() > 19) {
System.out.println(sb.toString());
sb = new StringBuilder();
}
sb.append(i);
if(i / 10 < 1) {
sb.append(" ");
} else {
sb.append(" ");
}
}
System.out.println(sb.toString());
}
}
输入:
Enter Day (Number): 2
Enter the number of days in the month: 31
输出:
S M T W T F S
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
答案 1 :(得分:0)
您的代码非常复杂。我不认为我的也是最好的,但现在是:
public calendar() {
int day = 2;
int numOfDays = 28;
System.out.println("S M T W T F S");
for(int i = 1; i < day; i++){
System.out.print(" ");
}
for(int i = 1; i <= numOfDays; i++){
System.out.print(addSpaces(i + "", 3));
if((i + day - 1) % 7 == 0){
System.out.print("\n");
}
}
}
public String addSpaces(String s, int length){
while(s.length() < length){
s+= " ";
}
return s;
}
尝试理解这一点,首先打印一些空格以跳过第一天,然后打印出所有日期和每第七天,它开始一个新行。
输出结果为:
S M T W T F S
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
答案 2 :(得分:0)
这是另一种变体。
static void cal( int day, int numOfDays ){
System.out.println(" S M T W T F S");
for( int d = 2 - day; d <= numOfDays; ++d ){
System.out.print( (d <= 0 ? " " : d <= 9 ? " " + d : d)
+ " " );
if( d%7 == (8-day)%7 ) System.out.println();
}
System.out.println();
}
这个想法有点奇闻趣事:将月份的日期延长到非积极因素以避免最初的缩进。计算打印位置并触发打印位置可以避免使用两个模运算的棘手条件。
(在构造函数中执行此类操作并不是一种好的编码习惯。)