| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 749 人关注过本帖
标题:帮我找出错误所在,谢了。。
只看楼主 加入收藏
cj_yang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-12-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
帮我找出错误所在,谢了。。
以下代码就是个月历表,运行可以,就是达不了理想的功能,可以告诉我错在哪吗??

import java.util.*;

public class PrintCalendar {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        System.out.print("请输入年份:");
        int year = input.nextInt();
        
        System.out.print("\n请输入月份:");   
        int month = input.nextInt();
        
        printMonth(year, month);
    }   
   
    public static void printMonth(int year, int month) { //输出月历
        printMonthTitle(year, month);
        printMonthBody(year, month);
    }
   
    public static void printMonthTitle(int year, int month) { //输出月历头
        System.out.println("           " + year+"  "+getMonthName(month) );
        System.out.println("----------------------------");
        System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
    }
   
    public static void printMonthBody(int year, int month) { //输出月历体
        int startDay = getStartDay(year, month);
        int daysInMonth = getDaysInMonth(year, month);
        int i;
        
        for (i=0; i<startDay; i++) {
            System.out.print("    ");   
        }
        
        for (i=1; i<=daysInMonth; i++) {
            System.out.printf("%4d", i);
            
            if ( (i + startDay) % 7 == 0    ) {
                System.out.println();   
            }
        }
         
        System.out.println();
        
    }
   
    public static String getMonthName(int month) { //返回月名
        switch (month) {
            case 1 : return "一月";   
            case 2 : return "二月";
            case 3 : return "三月";
            case 4 : return "四月";
            case 5 : return "五月";
            case 6 : return "六月";
            case 7 : return "七月";
            case 8 : return "八月";
            case 9 : return "九月";
            case 10 : return "十月";
            case 11 : return "十一月";
            case 12 : return "十二月";
        }
        
        return " ";
    }   
   
    public static int getStartDay(int year, int month) { //返回月初的星期数
        final int START_DAY_FOR_JAN_1_1800 = 3;
        int totalNumberOfDays = getTotalNumberOfDays(year, month);
        
        return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7;
    }
   
    public static int getTotalNumberOfDays(int year, int month) { //返回1800年至月历年的天数
        int i, total = 0;
        
        for (i=1800; i<year; i++) {
            if ( leapYeay(year) ) {
                total = total + 366;   
            }   
            
            else {
                total = total + 365;   
            }
        }
        
        for (i=1; i<month; i++) {
            total = total + getDaysInMonth(year, i);   
        }
        
        return total;
    }
   
    public static int getDaysInMonth(int year, int month) { //返回该月天数
        switch (month) {
            case 1 :
            case 3 :
            case 5 :
            case 7 :
            case 8 :
            case 10 :
            case 12 : return 31;
            case 4 :
            case 6 :
            case 9 :
            case 11 : return 30;
            case 2 : return leapYeay(year) ? 29 : 28;     
        }
        
        return 0;
    }  
   
    public static boolean leapYeay(int year) { //判断是否为闰年
        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    }
}
搜索更多相关主题的帖子: static void public import 
2013-04-02 18:47
cj_yang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-12-28
收藏
得分:0 
没人吗?
2013-04-02 20:17
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:20 
return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7; 判断星期数 应该是  return (totalNumberOfDays % 7 + START_DAY_FOR_JAN_1_1800);
 for (i=1800; i<year; i++) {
            if ( leapYeay(1800+i) ) {//这个地方你要判断每年是否是汝南,而不是单单判断输入的那年是否是闰年,
                total = total + 366;   
            }   
            
            else {
                total = total + 365;   
            }
        }
2013-04-02 22:53
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:0 
暂时发现这两个地方,试试看能不能正确。
2013-04-02 22:54
cj_yang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-12-28
收藏
得分:0 
我知道错在哪了 。。   
  for (i=1800; i<year; i++) {
             if ( leapYeay(year) ) { //这部分应该改为if ( leapYeay(i) ),因为i是1800起步的,谢谢解答了。。
                 total = total + 366;   
            }
        }   
2013-04-03 23:20
快速回复:帮我找出错误所在,谢了。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033491 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved