黑马程序员技术交流社区
标题:
关于枚举问题?已解决
[打印本页]
作者:
黑马罗坚
时间:
2012-6-7 22:59
标题:
关于枚举问题?已解决
本帖最后由 nailsoul 于 2012-6-8 10:31 编辑
package aa;
import static java.lang.System.out;
class EnumTest {
static WeekdayDemo day;
public static void main(String[] args) {
day=WeekdayDemo.SUNDAY.nextDay();
out.println(day+" "+day.pos);
day.nextDay();
out.println(day+" "+day.pos);
out.println();
day=WeekdayDemo.MONDAY;
sop();
day=WeekdayDemo.valueOf(1);
sop();
out.println();
day=WeekdayDemo.MONDAY;
sop1();
day=WeekdayDemo.valueOf(1);
sop1();
out.println();
day=WeekdayDemo.DAYS[0];
out.println(day+" "+day.pos);
out.println(WeekdayDemo.DAYS[WeekdayDemo.TUSDAY.pos]);
}
public static void sop(){
for(int i=0;i<8;i++){
out.print(day+" "+day.pos+"\t");
day=day.nextDay();
}
out.println();
}
public static void sop1(){
for(int i=0;i<8;i++){
out.print(day+" "+day.pos+"\t");
day=day.nextDay1();
}
out.println();
}
}
class WeekdayDemo{
private String name;
public int pos;
public static final WeekdayDemo MONDAY=new WeekdayDemo("MONDAY",1);
public static final WeekdayDemo TUSDAY=new WeekdayDemo("TUSDAY",2);
public static final WeekdayDemo WEDNESDAY=new WeekdayDemo("WEDNESDAY",3);
public static final WeekdayDemo THURSDAY=new WeekdayDemo("THURSDAY",4);
public static final WeekdayDemo FRIDAY=new WeekdayDemo("FRIDAY",5);
public static final WeekdayDemo SATURDAY=new WeekdayDemo("SATURDAY",6);
public static final WeekdayDemo SUNDAY=new WeekdayDemo("SUNDAY",0);
public static final WeekdayDemo[] DAYS=new WeekdayDemo[] {SUNDAY,MONDAY,TUSDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY};
private WeekdayDemo(){}
private WeekdayDemo(String name,int pos){
this.name=name;
this.pos=pos;
}
public WeekdayDemo nextDay(){
return DAYS[pos==6?0:++pos];
}
public WeekdayDemo nextDay1(){
int index=0;
for(;index<DAYS.length;index++){
if(this==DAYS[index]){
break;
}
}
return DAYS[index==6?0:++index];
}
public static WeekdayDemo valueOf(int index){
return(DAYS[index<7?index:0]);
}
@Override
public String toString(){
return this.name;
}
}
复制代码
结果为:
MONDAY 1
MONDAY 2
MONDAY 1 TUSDAY 2 WEDNESDAY 3 THURSDAY 4 FRIDAY 5 SATURDAY 6 SUNDAY 0 MONDAY 2
MONDAY 3 THURSDAY 5 SATURDAY 6 SUNDAY 1 TUSDAY 3 THURSDAY 6 SUNDAY 2 WEDNESDAY 4
MONDAY 4 TUSDAY 4 WEDNESDAY 5 THURSDAY 6 FRIDAY 6 SATURDAY 6 SUNDAY 3 MONDAY 4
MONDAY 4 TUSDAY 4 WEDNESDAY 5 THURSDAY 6 FRIDAY 6 SATURDAY 6 SUNDAY 3 MONDAY 4
SUNDAY 4
WEDNESDAY
结果为什么是这样子的哦 ? pos是对象的成员变量记录是的角标 怎么pos跟name不对号呢? 第一行正确的 怎么地2行是MONDAY 2 而不是MONDAY 1啊?
最后2到4行名字正确了 角标为什么还是不正确啊 最后一行为什么取出来的是WEDNESDAY哦?
郁闷 昨天想了半天都不知道哪里错了 今天早上吃早餐时 稍微想下就想通了 看来 当想不通一个问题时 还是等段时间在想才是正解啊。。。。
public WeekdayDemo nextDay(){
//return DAYS[pos==6?0:++pos]; ++pos把对象的pos+1 导致了 一个对象调用一次这个方法它的pos值就+1 在根据pos值取对象自然就取错了
return DAYS[pos==6?0:1+pos];
}
day=WeekdayDemo.SUNDAY.nextDay(); //SUNDAY的pos值变成了1 day=MONDAY
out.println(day+" "+day.pos); //打印Monday 1
day.nextDay(); //Monday的pos值自增变成了2 day.nextDay();的返回值THUSDAY没赋给day所以day=MONDAY
out.println(day+" "+day.pos); //打印MONDAY 2
out.println(); //打印"\n"
day=WeekdayDemo.MONDAY; //day=Monday
//i=0 打印前day=MONDAY //打印MONDAY 2 //打印后MONDAY的pos值为3 day=WEDNESDAY;
//i=1 day=WEDNESDAY; //打印WEDNESDAY 3 //WEDNESDAY的pos值为4 day=THURSDAY;
//....................
//i=4 day=SATURDAY //打印SATURDAY 6 //SATURDAY.pos=6 day=SUNDAY
//i=5 day=SUNDAY //打印 SUNDAY 1 //SUNDAY.POS=2 day=TUSDAY
//i=6 day=TUSDAY //打印TUSDAY 2 //TUSDAY.pos=3 day=WEDNESDAY
//i=7 day=WEDNESDAY //打印WEDNESDAY 4 //WEDNESDAY.pos=5 day=THURSDAY
sop();
//所以到这里为止打印的是
// MONDAY 1
// MONDAY 2
// MONDAY 2 WEDNESDAY 3 THURSDAY 4 FRIDAY 5 SATURDAY 6 SUNDAY 1 TUSDAY 2 WEDNESDAY 4
day=WeekdayDemo.valueOf(1);
//i=0 打印前day=MONDAY //打印MONDAY 3 //打印后MONDAY的pos值为4 day=THURSDAY;
//i=1 day=THURSDAY; //打印THURSDAY 5 //THURSDAY的pos值为6 day=SATURDAY
//i=2 day=SATURDAY //打印SATURDAY 6 //SATURDAY.pos=6 day=SUNDAY
//i=3 day=SUNDAY //打印SUNDAY 2 //SUNDAY.POS=3 day=WEDNESDAY
//i=4 day=WEDNESDAY //打印WEDNESDAY 5 //WEDNESDAY.pos=6 day=SATURDAY
//i=5 day=SATURDAY //打印 SATURDAY 6 //SATURDAY.POS=6 day=SUNDAY
//i=6 day=SUNDAY //打印SUNDAY 3 //SUNDAY.pos=4 day=THURSDAY
//i=7 day=THURSDAY //打印THURSDAY 6 //SATURDAY.pos=6 day=SUNDAY
sop();
//上面一句打印MONDAY 3 THURSDAY 5 SATURDAY 6 SUNDAY 2 WEDNESDAY 5 SATURDAY 6 SUNDAY 3 THURSDAY 6
out.println();
day=WeekdayDemo.MONDAY;
sop1();
//打印的MONDAY到SUNDAY的pos值经过上面的语句一句不是初值了
//打印 MONDAY 4 TUSDAY 3 WEDNESDAY 6 THURSDAY 6 FRIDAY 6 SATURDAY 6 SUNDAY 4 MONDAY 4
day=WeekdayDemo.valueOf(1);
sop1();
//打印 MONDAY 4 TUSDAY 3 WEDNESDAY 6 THURSDAY 6 FRIDAY 6 SATURDAY 6 SUNDAY 4 MONDAY 4
out.println();
day=WeekdayDemo.DAYS[0];
out.println(day+" "+day.pos);
//打印SUNDAY 4 因为SUNDAY的pos为4
out.println(WeekdayDemo.DAYS[WeekdayDemo.TUSDAY.pos]);
//打印WEDNESDAY 因为TUSDAY的pos为3 DAYS[3]为WEDNESDAY
/*
所以最终结果为
MONDAY 1
MONDAY 2
MONDAY 2 WEDNESDAY 3 THURSDAY 4 FRIDAY 5 SATURDAY 6 SUNDAY 1 TUSDAY 2 WEDNESDAY 4
MONDAY 3 THURSDAY 5 SATURDAY 6 SUNDAY 2 WEDNESDAY 5 SATURDAY 6 SUNDAY 3 THURSDAY 6
MONDAY 4 TUSDAY 3 WEDNESDAY 6 THURSDAY 6 FRIDAY 6 SATURDAY 6 SUNDAY 4 MONDAY 4
MONDAY 4 TUSDAY 3 WEDNESDAY 6 THURSDAY 6 FRIDAY 6 SATURDAY 6 SUNDAY 4 MONDAY 4
SUNDAY 4
WEDNESDAY
*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2