黑马程序员技术交流社区

标题: 关于枚举 [打印本页]

作者: hanrongle    时间: 2013-8-17 15:41
标题: 关于枚举
  1. enum Week {
  2.         MON("星期一",1),TUE("星期二",2),WEN("星期三",3),THI("星期四",4),
  3.         FRI("星期五",5),SAT("星期六",7),SUN("星期日",8);
  4.         //成员变量
  5.         private String Name;
  6.         private int index;
  7.        
  8.         //构造方法
  9.         private Week(String Name,int index) {
  10.                 this.Name = Name;
  11.                 this.index = index;
  12.         }
  13.        
  14.         // get set 方法  
  15.         public String getName() {  
  16.             return Name;  
  17.         }  
  18.         public void setName(String Name) {  
  19.             this.Name = Name;  
  20.         }  
  21.         public  int getIndex() {  
  22.             return index;  
  23.         }  
  24.         public void setIndex(int index) {  
  25.             this.index = index;  
  26.         }
  27.        
  28.         //星期的中文格式
  29.         public  String toLocaleString() {
  30.                 for (Week w : Week.values())
  31.                 {  
  32.                         if (w.getIndex() == index)
  33.                         {
  34.                                 System.out.println(w.Name);  
  35.                     }  
  36.                 }  
  37.                 return null;
  38.         }
  39. }


  40. public class Test3{
  41.          public static void main(String[] args){
  42.                  Week.toLocaleString();
  43.          }
  44. }
复制代码
这个程序只剩下一点小小的问题了,怎么解决?

作者: hanrongle    时间: 2013-8-17 16:51
邪恶飞猫 发表于 2013-8-17 16:36
Week是一个类,继承了Enum父类。而MON,TUE,WED,THI,FRI,SAT,SUN是Week的实例。调用方法和普通类的一 ...

一周有七天,按照你的做法就要实例化7次,我这样写了一个,就是太麻烦了。在我的这个程序中用到索引,循环7次就可以了,比较方便。问题就从在于toLocaleString是非静态方法,不能访问!
作者: 心灵之歌    时间: 2013-8-17 17:31
改成下面那样试试>...
enum Week {
        MON("星期一",1),TUE("星期二",2),WEN("星期三",3),THI("星期四",4),
        FRI("星期五",5),SAT("星期六",7),SUN("星期日",8);
        //成员变量
        private String Name;
        private int index;
        
        //构造方法
        private Week(String Name,int index) {
                this.Name = Name;
                this.index = index;
        }
        
        // get set 方法  
        public String getName() {  
            return Name;  
        }  
        public void setName(String Name) {  
            this.Name = Name;  
        }  
        public  int getIndex() {  
            return index;  
        }  
        public void setIndex(int index) {  
            this.index = index;  
        }
        
        //星期的中文格式
        public  String toLocaleString() {
                for (Week w : Week.values())
                {  
                        if (w.getIndex() == index)
                        {
                                System.out.println(w.Name);  
                    }  
                }  
                return null;
        }
}


public class Test3{
         public static void main(String[] args){
                 Week wk = Week.MON;                //实例化Week类对象
            
                 Week.toLocaleString();
         }
}

作者: hanrongle    时间: 2013-8-17 18:51
邪恶飞猫 发表于 2013-8-17 17:30
这么改,不应该把循环方法放在枚举类里。你的循环写得有点复杂,getIndex()一开始我没怎么看清楚什么用。下 ...

这个只能输出英文格式,要的是输出中文格式
作者: 杨增坤    时间: 2013-8-21 08:21
enum Week {
        MON("星期一", 1), TUE("星期二", 2), WEN("星期三", 3), THI("星期四", 4), FRI("星期五", 5), SAT(
                        "星期六", 7), SUN("星期日", 8);
        // 成员变量
        private String Name;
        private int index;

        // 构造方法
        private Week(String Name, int index) {
                this.Name = Name;
                this.index = index;
        }

        // get set 方法
        public String getName() {
                return Name;
        }

        public void setName(String Name) {
                this.Name = Name;
        }

        public int getIndex() {
                return index;
        }

        public void setIndex(int index) {
                this.index = index;
        }

        // 星期的中文格式
        public void toLocaleString() {//如果这样写的话,那么输出的只是当前的星期,而不是遍历的全部
                /*
                 * for (Week w : Week.values()) { if (w.getIndex() == index) {
                 * System.out.println(w.Name); } }
                 */
                for (Week w : Week.values()) // 枚举.values()得到全部枚举内容
                {
                        System.out.println(w.getName());  
                }
        }
        /*
         * 枚举的构造方法是私有的,所以不能在外面实例化,
         * 那就在本类中返回一个实例对象,
         * 这也就是单例模式
         */
        public static Week getWeek(){
                return Week.MON;
        }
}
public class text {
        public static void main(String[] args) {
                Week.getWeek().toLocaleString();               
        }
}


希望对你有帮助!






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2