import java.util.*;public class JavaApplication17 { public static void main(String[] args) { ClendarBean cb = new ClendarBean(); cb.setMonth(2016); cb.setMonth(11); String a[] = cb.getCalendar(); char str[] ="日一二三四五六".toCharArray(); for(char c:str){ System.out.printf("%3c",c); } for(int i=0;i<a.length;i++){ if(i%7==0){ System.out.println(""); } System.out.printf("%4c",a[i]); } }}class ClendarBean{ int year = 0; int month = 0; public void setYear(int year){ this.year = year; } public void setMonth(int month){ this.month = month; } public String [] getCalendar(){ String a[] = new String[45]; Calendar calendar = Calendar.getInstance(); calendar.set(year,month-1,1); int weekDay = calendar.get(Calendar.DAY_OF_WEEK)-1; int day = 0; if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){ day = 31; } if(month==4 || month==6 || month== 9 || month==11){ day = 30; } if(month==2){ if(year%4==0&year%100 !=0 || year%400==0){ day = 29; } else day = 28; } for(int i=0;i<weekDay;i++){ a[i] =""; } for(int i=weekDay,n=1;i<weekDay+day;i++){ a[i] = String.valueOf(n); n++; } for(int i=weekDay;i<a.length;i++){ a[i] = ""; } return a;}}没有显示错误,但是不出来结果不知道错在哪里
你的Java日历程序我帮你改好了,你看看吧.(改动的地方见注释)
import java.util.*;public class JavaApplication17{
public static void main(String[] args) {
ClendarBean cb = new ClendarBean();
cb.setMonth(2016);
cb.setMonth(11);
String a[] = cb.getCalendar();
char str[] ="日一二三四五六".toCharArray();
for(char c:str){
System.out.printf("%7c",c);//这里改一下"%3c"改成"%7c"
}
System.out.println();//这里加一句换行
for(int i=0;i<a.length;i++){
System.out.printf("%3s",a[i]);//这里"%3c"改成"%3s"并移到这里
if((i+1)%7==0){//这里i%7==0改成(i+1)%7==0
System.out.println();
}
}
}
}
class ClendarBean{
int year = 0;
int month = 0;
public void setYear(int year){
this.year = year;
}
public void setMonth(int month){
this.month = month;
}
public String [] getCalendar(){
String a[] = new String[45];
Calendar calendar = Calendar.getInstance();
calendar.set(year,month-1,1);
int weekDay = calendar.get(Calendar.DAY_OF_WEEK)-1;
int day = 0;
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
day = 31;
}
if(month==4 || month==6 || month== 9 || month==11){
day = 30;
}
if(month==2){
if(year%4==0&year%100 !=0 || year%400==0){
day = 29;
}
else day = 28;
}
for(int i=0;i<weekDay+1;i++){//这里i<weekDay;改成i<weekDay+1;
a[i] ="";
}
for(int i=weekDay+1,n=1;i<weekDay+day+1;i++){//这里int i=weekDay;改成int i=weekDay+1; i<weekDay+day;改成i<weekDay+day+1;
a[i] = String.valueOf(n);
n++;
}
for(int i=weekDay+day+1;i<a.length;i++){//这里i=weekDay+day;改成i=weekDay+day+1;
a[i] = "";
}
return a;
}
}
运行结果
追问为什么weekDay+day要加一啊
追答因为weekDay是从0开始的,ClendarBean类getCalendar函数第一个for-i循环,从0到weekDay-1(因为i<weekDay)所以为了循环从0到weekDay要(i<weekDay+1)
以11月为例,weekDay=1,原来的循环从0到i<weekDay只能循环一次,而按照weekDay的意思,应该循环两次weekDay=0一次,weekDay=1一次,所以要i<weekDay+1,同样向后推理,第二个for-i循环for(int i=weekDay+1,n=1;i<weekDay+day+1;i++)weekDay都要加一.第三个for-i循环for(int i=weekDay+day+1;i<a.length;i++)weekDay+day也要加一.