上面这些代码。在输入每一年的1月或者2月的时候 生成的日历就是错的 而输入别的月份应该都是对的 我是初学者 实在找不出来错误了 希望各位看一下告诉我 。 谢谢了!import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
import java.util.Scanner;public class wenjian
{
public static void main(String args[])
{
int nian=0;
int yue=0;
Scanner dedao=new Scanner(System.in); System.out.print("请输入年:");
nian=dedao.nextInt();
System.out.print("请输入月:");
yue=dedao.nextInt(); if (nian<0 || yue<0 || yue>12)
System.out.println("请输入正确的信息!");
else
{
shijian a=new shijian(nian,yue);
a.shezhiriqi();
a.dedaoxingqi();
a.jisuanxingqi();
a.xianshi(); } }
}class shijian
{
//声明成员
private int nian; //保存年
private int yue; //保存月
private String xingqi; //得到日期字符串
private int shuzi = 0; //把日期转换成数字后保存到这里
private int runnian = 0; //判断闰年//声明对象
Date riqi = null;
Calendar setriqi = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("E");//以下是构造方法
public shijian(int nian, int yue) {
this.nian = nian;
this.yue = yue; if (nian % 4 == 0 && nian % 100 != 0) //判断闰年代码块
runnian = 1;
else if (nian % 100 == 0 && nian % 400 == 0)
runnian = 1;
} void shezhiriqi() { //把用户输入的年月设置为setriqi对象里的一部分
setriqi.set(Calendar.YEAR, nian);
setriqi.set(Calendar.MONTH, yue + 1);
riqi = setriqi.getTime(); //把设置后的时间生成一个Date对象返回给riqi引用
} void dedaoxingqi() { // 输入riqi里的星期,把星期值赋给字符串xingqi
xingqi = format.format(riqi);
} void jisuanxingqi() { //对xingqi的值进行检测
if (xingqi.equals("星期一"))
shuzi = 1;
else if (xingqi.equals("星期二"))
shuzi = 2;
else if (xingqi.equals("星期三"))
shuzi = 3;
else if (xingqi.equals("星期四"))
shuzi = 4;
else if (xingqi.equals("星期五"))
shuzi = 5;
else if (xingqi.equals("星期六"))
shuzi = 6;
else if (xingqi.equals("星期日"))
shuzi = 0;
} void xianshi() {
int tianshu; //检测用户输入的月份有多少天
switch (yue) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
tianshu = 31;
break;
default:
tianshu = 30;
} if (runnian == 1 && yue == 2) //如果是闰年而且月份是2月
tianshu = 29; //tianshu就是29
else if (runnian != 1 && yue == 2)
tianshu = 28; //如果不是闰年不过月份是2月 那tianshu就是28 System.out.println("\t\t\t\t" + nian + "\t" + yue + "\n"); //输出
System.out.println("\t日\t一\t二\t三\t四\t五\t六"); for (int i = 0; i < shuzi; i++) { //输出tab 为了对齐
System.out.print("\t");
}
for (int i = 1; i <= tianshu; i++, shuzi++) {
if (shuzi == 7) { //把值循环输出
System.out.print("\n");
shuzi = 0;
} System.out.print("\t" + i);
}
}
}
import java.util.Date;
import java.util.Calendar;
import java.util.Scanner;public class wenjian
{
public static void main(String args[])
{
int nian=0;
int yue=0;
Scanner dedao=new Scanner(System.in); System.out.print("请输入年:");
nian=dedao.nextInt();
System.out.print("请输入月:");
yue=dedao.nextInt(); if (nian<0 || yue<0 || yue>12)
System.out.println("请输入正确的信息!");
else
{
shijian a=new shijian(nian,yue);
a.shezhiriqi();
a.dedaoxingqi();
a.jisuanxingqi();
a.xianshi(); } }
}class shijian
{
//声明成员
private int nian; //保存年
private int yue; //保存月
private String xingqi; //得到日期字符串
private int shuzi = 0; //把日期转换成数字后保存到这里
private int runnian = 0; //判断闰年//声明对象
Date riqi = null;
Calendar setriqi = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("E");//以下是构造方法
public shijian(int nian, int yue) {
this.nian = nian;
this.yue = yue; if (nian % 4 == 0 && nian % 100 != 0) //判断闰年代码块
runnian = 1;
else if (nian % 100 == 0 && nian % 400 == 0)
runnian = 1;
} void shezhiriqi() { //把用户输入的年月设置为setriqi对象里的一部分
setriqi.set(Calendar.YEAR, nian);
setriqi.set(Calendar.MONTH, yue + 1);
riqi = setriqi.getTime(); //把设置后的时间生成一个Date对象返回给riqi引用
} void dedaoxingqi() { // 输入riqi里的星期,把星期值赋给字符串xingqi
xingqi = format.format(riqi);
} void jisuanxingqi() { //对xingqi的值进行检测
if (xingqi.equals("星期一"))
shuzi = 1;
else if (xingqi.equals("星期二"))
shuzi = 2;
else if (xingqi.equals("星期三"))
shuzi = 3;
else if (xingqi.equals("星期四"))
shuzi = 4;
else if (xingqi.equals("星期五"))
shuzi = 5;
else if (xingqi.equals("星期六"))
shuzi = 6;
else if (xingqi.equals("星期日"))
shuzi = 0;
} void xianshi() {
int tianshu; //检测用户输入的月份有多少天
switch (yue) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
tianshu = 31;
break;
default:
tianshu = 30;
} if (runnian == 1 && yue == 2) //如果是闰年而且月份是2月
tianshu = 29; //tianshu就是29
else if (runnian != 1 && yue == 2)
tianshu = 28; //如果不是闰年不过月份是2月 那tianshu就是28 System.out.println("\t\t\t\t" + nian + "\t" + yue + "\n"); //输出
System.out.println("\t日\t一\t二\t三\t四\t五\t六"); for (int i = 0; i < shuzi; i++) { //输出tab 为了对齐
System.out.print("\t");
}
for (int i = 1; i <= tianshu; i++, shuzi++) {
if (shuzi == 7) { //把值循环输出
System.out.print("\n");
shuzi = 0;
} System.out.print("\t" + i);
}
}
}
import java.util.Date;
import java.util.Calendar;
import java.util.Scanner;public class wenjian
{
public static void main(String args[])
{
int nian=0;
int yue=0;
Scanner dedao=new Scanner(System.in);System.out.print("请输入年:");
nian=dedao.nextInt();
System.out.print("请输入月:");
yue=dedao.nextInt();if (nian<0 || yue<0 || yue>12)
System.out.println("请输入正确的信息!");
else
{
shijian a=new shijian(nian,yue);
a.shezhiriqi();
a.dedaoxingqi();
a.jisuanxingqi();
a.xianshi();}}
}class shijian
{
//声明成员
private int nian; //保存年
private int yue; //保存月
private String xingqi; //得到日期字符串
private int shuzi = 0; //把日期转换成数字后保存到这里
private int runnian = 0; //判断闰年//声明对象
Date riqi = null;
Calendar setriqi = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("E");//以下是构造方法
public shijian(int nian, int yue) {
this.nian = nian;
this.yue = yue;if (nian % 4 == 0 && nian % 100 != 0) //判断闰年代码块
runnian = 1;
else if (nian % 100 == 0 && nian % 400 == 0)
runnian = 1;
}void shezhiriqi() { //把用户输入的年月设置为setriqi对象里的一部分
setriqi.set(Calendar.YEAR, nian);
setriqi.set(Calendar.MONTH, yue - 1);
setriqi.set(Calendar.DAY_OF_MONTH, 1);
riqi = setriqi.getTime(); //把设置后的时间生成一个Date对象返回给riqi引用
}void dedaoxingqi() { // 输入riqi里的星期,把星期值赋给字符串xingqi
xingqi = format.format(riqi);
System.out.println("xingqi: "+xingqi);
}void jisuanxingqi() { //对xingqi的值进行检测
if (xingqi.equals("星期一"))
shuzi = 1;
else if (xingqi.equals("星期二"))
shuzi = 2;
else if (xingqi.equals("星期三"))
shuzi = 3;
else if (xingqi.equals("星期四"))
shuzi = 4;
else if (xingqi.equals("星期五"))
shuzi = 5;
else if (xingqi.equals("星期六"))
shuzi = 6;
else if (xingqi.equals("星期日"))
shuzi = 0;
}void xianshi() {
int tianshu; //检测用户输入的月份有多少天
switch (yue) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
tianshu = 31;
break;
default:
tianshu = 30;
}if (runnian == 1 && yue == 2) //如果是闰年而且月份是2月
tianshu = 29; //tianshu就是29
else if (runnian != 1 && yue == 2)
tianshu = 28; //如果不是闰年不过月份是2月 那tianshu就是28System.out.println("\t\t\t\t" + nian + "\t" + yue + "\n"); //输出
System.out.println("\t日\t一\t二\t三\t四\t五\t六");for (int i = 0; i < shuzi; i++) { //输出tab 为了对齐
System.out.print("\t");
}
for (int i = 1; i <= tianshu; i++, shuzi++) {
if (shuzi == 7) { //把值循环输出
System.out.print("\n");
shuzi = 0;
}System.out.print("\t" + i);
}
}
}
setriqi.set(Calendar.MONTH, yue + 1);这里你要加一句
setriqi.set(Calendar.DAY_OF_MONTH, 1);把日期设置成一号,否则是今天的日期24号,这样得到的星期肯定不是你想要的,另外
setriqi.set(Calendar.MONTH, yue + 1);要改为:
setriqi.set(Calendar.MONTH, yue - 1);
因为Calendar的MONTH是从0开始计数的,比如你在程序运行的是输入1,希望它显示一月份的日期,但是如果你不减一,那么将显示二月份的日期,更没有道理加一了。
1、设置月的时候应该是setriqi.set(Calendar.MONTH, yue - 1);
2. 取日期的时候日期应该设置为1,否则认为是执行当天的日期,那样取出来当然不对
也就是
setriqi.set(Calendar.MONTH, yue - 1);
setriqi.set(Calendar.DATE, 1);
原来是返回今天是星期几的。 汗谢谢啦!