首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

新手做日历时的一个有关问题

2012-03-17 
新手做日历时的一个问题上面这些代码。在输入每一年的1月或者2月的时候生成的日历就是错的而输入别的月份应

新手做日历时的一个问题
上面这些代码。在输入每一年的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.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);
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就是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);
}
}
}
[解决办法]
两个错误
1、设置月的时候应该是setriqi.set(Calendar.MONTH, yue - 1);
2. 取日期的时候日期应该设置为1,否则认为是执行当天的日期,那样取出来当然不对
也就是
setriqi.set(Calendar.MONTH, yue - 1);
setriqi.set(Calendar.DATE, 1);

热点排行