A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 小黑子 中级黑马   /  2014-8-24 12:37  /  1750 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小黑子 于 2014-8-24 16:05 编辑

问题1:我第一次建立String类型数组是用的86、87行代码:
                //String[] week = new String[7];
                //week[7] = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

因为编译不通过,所以注释掉了。运行结果如:图1
可是我想知道为什么错了,应该怎么改?
问题2:然后我用新的语句,88行代码建立了String类型数组,编译后,截图如:图2
          请问,这两个error该怎么改?:'(
  1. /*
  2. 需求:输入一个时期,可以判断出是星期几
  3. 思想:设置一个初始日期,包括年,月,日,星期。如,2001-1-1 星期6
  4.           求出初始日期与当前日期的天数差值,然后再计算当前星期
  5. */

  6. class Date
  7. {
  8.         int year;
  9.         int month;
  10.         int day;
  11.         int week;
  12.         Date(int year,int month,int day)
  13.         {
  14.                 this.year = year;
  15.                 this.month = month;
  16.                 this.day = day;
  17.         }
  18.         Date(int year,int month,int day,int week)
  19.         {
  20.                 Date(year,month,day);
  21.                 this.week = week;
  22.         }
  23.         void printDate()
  24.         {
  25.                 System.out.print(this.year+"-"+this.month+"-"+this.day);
  26.         }
  27. }

  28. class LeapYear
  29. {
  30.         //判断是否是闰年
  31.         public boolean isLeapYear(int year)
  32.         {
  33.                 if(year%400==0 || year%100!=0 && year%4==0)
  34.                         return true;
  35.                 else
  36.                         return false;
  37.         }
  38. }

  39. class HowManyDays
  40. {
  41.         //2000年1月1日是周六
  42.         public final static Date startDate = new Date(2000,1,1,6);
  43.         int sumDays = 0;
  44.         //计算初始值与当前日期相差天数
  45.         public int getDays(Date endDate)
  46.         {
  47.                 //计算相差整年的天数(即去年12月31日与2000.1.1之间共多少天)
  48.                 for(int i=startDate.year;i<endDate.year;i++)
  49.                 {
  50.                         sumDays = sumDays+(new LeapYear().isLeapYear(i) ? 366 : 365);
  51.                 }
  52.                 //计算相差整月的天数
  53.                 switch(endDate.month-1)
  54.                 {
  55.                         case 11: sumDays+=30;
  56.                         case 10: sumDays+=31;
  57.                         case 9 : sumDays+=30;
  58.                         case 8 : sumDays+=31;
  59.                         case 7 : sumDays+=31;
  60.                         case 6 : sumDays+=30;
  61.                         case 5 : sumDays+=31;
  62.                         case 4 : sumDays+=30;
  63.                         case 3 : sumDays = sumDays+(new LeapYear().isLeapYear(endDate.year) ? 29:28);
  64.                         case 2 : sumDays+=30;
  65.                         case 1 : sumDays+=31;
  66.                 }
  67.                 //计算相差的零散天数
  68.                 sumDays+=endDate.day;

  69.                 return sumDays;
  70.         }

  71. }

  72. class WhichWeek
  73. {
  74.         public String getWeek(Date endDate)
  75.         {
  76.                 int sumDays = new HowManyDays().getDays(endDate);
  77.                 int path;//补丁
  78.                 path = startDate.week-1;//path+sumDays,模7后余几就是星期几,余0就是星期日。
  79.                 int wk = (path+sumDays)%7;//作为数组下标
  80.                 //String[] week = new String[7];
  81.                 //week[7] = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
  82.                 String[] week = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
  83.                 return week[wk];
  84.         }

  85. }

  86. class Excise314
  87. {
  88.         public static void main(String[] args)
  89.         {
  90.                 Date endDate = new Date(2000,1,1);
  91.                 String week = new WhichWeek().getWeek(endDate);
  92.                 endDate.printDate();
  93.                 System.out.println(": "+week);
  94.         }
  95. }
复制代码



图1.png (73.54 KB, 下载次数: 25)

图1

图1

图2.png (22.53 KB, 下载次数: 36)

图2

图2

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 基础要扎实

查看全部评分

8 个回复

倒序浏览
你都已经改了,怎么还问为什么错…本来就没有这个写法啊…
startDate 没有定义,我猜你可能是这个意思
  1.                 path = HowManyDays.startDate.week - 1;// path+sumDays,模7后余几就是星期几,余0就是星期日。
  2.                 int wk = (path + sumDays) % 7;// 作为数组下标
复制代码

Date 大概是要引用构造方法,应该用 this
  1.                 this(year, month, day);
  2.                 this.week = week;
复制代码

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很给力!

查看全部评分

回复 使用道具 举报
week[7]代表的是week数组中的第7个元素,
String[] week = new String[7]代表week数组长度为7,每个元素初始化为null
你可以直接在声明的时候初始化String[] weeks={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
或者
String[] week = new String[7];
week[0]="星期日";
week[1]="星期一";
week[2]="星期二";
week[3]="星期三";
week[4]="星期四";
week[5]="星期五";
week[6]="星期六";

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

回复 使用道具 举报
icris 发表于 2014-8-24 13:02
你都已经改了,怎么还问为什么错…本来就没有这个写法啊…
startDate 没有定义,我猜你可能是这个意思

谢谢哈,看来我语法还是记得灰常不熟练啊…………
回复 使用道具 举报
小黑子 发表于 2014-8-24 16:03
谢谢哈,看来我语法还是记得灰常不熟练啊…………

不知道这是什么题,但是如果没有专门要求不要自己做一个 Date 这样的东西出来,这叫造轮子…
单看需求可以这样
  1.         public static void main(String[] args) throws Exception {
  2.                 String string = "2014.8.24";
  3.                 Calendar calendar = Calendar.getInstance();
  4.                 calendar.setTime(new SimpleDateFormat("yyyy.MM.dd").parse(string));
  5.                 System.out.println(new DateFormatSymbols().getWeekdays()[calendar.get(Calendar.DAY_OF_WEEK)]);
  6.         }
复制代码

还有 new Date(year, month, date) 里面的 year 应该是要表示的年份减去 1900 ,写 2000 意思是 3900 年,而且这个方法已经标注废弃了,最好不要用了。
还有推荐一个工具 http://www.eclipse.org/downloads/ 用 IDE 方便看错误提示和源码
回复 使用道具 举报
if(year%400==0 || year%100!=0 && year%4==0)  这种可以吗
回复 使用道具 举报
碎流 发表于 2014-8-24 20:49
if(year%400==0 || year%100!=0 && year%4==0)  这种可以吗

可以啊,
&& 优先级高于 ||
回复 使用道具 举报
icris 发表于 2014-8-24 16:37
不知道这是什么题,但是如果没有专门要求不要自己做一个 Date 这样的东西出来,这叫造轮子…
单看需求可 ...

嗯,谢谢,我初学Java,本来想用Calendar,可是看不懂,就没用。网上找了,没见讲的比较好的。
回复 使用道具 举报
男人你得有范 来自手机 中级黑马 2014-8-26 18:31:52
9#
代码好多呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马