之前一直用C语言,在C语言中实现一个enum或struct很方便,而且整个工程都可以随便用。现在学习JAVA,也需要一个类似enum的枚举类型值。看到书上说,编写enum类,照着写了,可是在使用过程中报错,编译时通过了的,但是使用时就报错弹出了。工程刚开始写,只写了一下几个类:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++CheckChessPieces_t.java:public enum CheckChessPieces_t {
DO_CHECK, NO_CHECK;
}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ChessPieces_t.java:public enum ChessPieces_t {
BLACK_CHESS_PIECES, WHITE_CHESS_PIECES, EMPTY_CHESS_PIECES, DEAD_CHESS_PIECES, BOUNDARY;
}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Ambitus.java://
public class Ambitus {
// 自定义变量
// 该点左侧点存在形式
private ChessPieces_t mLftPt;
// 该点右侧点存在形式
private ChessPieces_t mRgtPt;
// 该点上侧点存在形式
private ChessPieces_t mTopPt;
// 该点下侧点存在形式
private ChessPieces_t mBtmPt;
// 自定义函数
public Ambitus() {
mLftPt = ChessPieces_t.EMPTY_CHESS_PIECES;
mRgtPt = ChessPieces_t.EMPTY_CHESS_PIECES;
mTopPt = ChessPieces_t.EMPTY_CHESS_PIECES;
mBtmPt = ChessPieces_t.EMPTY_CHESS_PIECES;
};
public ChessPieces_t getmLftPt() {
return mLftPt;
}
public void setmLftPt(ChessPieces_t mLftPt) {
this.mLftPt = mLftPt;
}
public ChessPieces_t getmRgtPt() {
return mRgtPt;
}
public void setmRgtPt(ChessPieces_t mRgtPt) {
this.mRgtPt = mRgtPt;
}
public ChessPieces_t getmTopPt() {
return mTopPt;
}
public void setmTopPt(ChessPieces_t mTopPt) {
this.mTopPt = mTopPt;
}
public ChessPieces_t getmBtmPt() {
return mBtmPt;
}
public void setmBtmPt(ChessPieces_t mBtmPt) {
this.mBtmPt = mBtmPt;
}
}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ChessPieces.java:public class ChessPieces {
// 自定义变量
// 该点存在形式
private ChessPieces_t mLocal;
// 该点四周处存在形式
private Ambitus mAmbitus;
// 该点是否是检查点
private CheckChessPieces_t mSta;
// 自定义函数
public ChessPieces() {
mLocal = ChessPieces_t.EMPTY_CHESS_PIECES;
mAmbitus = new Ambitus();
mSta = CheckChessPieces_t.NO_CHECK;
}
public ChessPieces_t getmLocal() {
return mLocal;
}
public void setmLocal(ChessPieces_t mLocal) {
this.mLocal = mLocal;
}
public Ambitus getmAmbitus() {
return mAmbitus;
}
public void setmAmbitus(Ambitus mAmbitus) {
this.mAmbitus = mAmbitus;
}
public CheckChessPieces_t getmSta() {
return mSta;
}
public void setmSta(CheckChessPieces_t mSta) {
this.mSta = mSta;
};
}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++BasicChessboard.java:public class BasicChessboard {
// 自定义变量
private ChessPieces[] mCP;
// 自定义函数
public BasicChessboard() {
mCP = new ChessPieces[100];
};
public ChessPieces getmCP(int x) {
return mCP[x];
}
public void setmCP(ChessPieces mCP, int x) {
this.mCP[x] = mCP;
}
}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++EnumClassTest.java:public class EnumClassTest {
// 自定义变量
private static BasicChessboard mBC = new BasicChessboard(); public static void main (String[] args) {
ChessPieces mmCP = mBC.getmCP(0);
/*
mBC.getmCP(0).setmLocal(ChessPieces_t.BLACK_CHESS_PIECES);
mBC.getmCP(0).getmAmbitus().setmTopPt(ChessPieces_t.BLACK_CHESS_PIECES);
mBC.getmCP(0).getmAmbitus().setmBtmPt(ChessPieces_t.WHITE_CHESS_PIECES);
mBC.getmCP(0).getmAmbitus().setmLftPt(ChessPieces_t.EMPTY_CHESS_PIECES);
mBC.getmCP(0).getmAmbitus().setmRgtPt(ChessPieces_t.DEAD_CHESS_PIECES);
mBC.getmCP(0).setmSta(CheckChessPieces_t.DO_CHECK);
//*/
System.out.println("运行结束");
}
}
被注释掉的代码一执行就报错退出了。我现在不懂得是,一个枚举类对象,为什么不能被访问,被赋值(当然能赋的值是该枚举类的),就像C语言里面一样,例如:
typedef enum age_e
{
    AGE_1 = 1,
    AGE_2 = 2,
    AGE_3 = 3,
    AGE_4 = 4,
    AGE_5 = 5
}AGE_t;
然后使用的时候就:
AGE_t iAge = AGE_1;
我现在就想达到这样的效果。java枚举类枚举类使用java

解决方案 »

  1.   

    一堆代码看的我头疼
    java中枚举的本质是一个类拥有自己的几个类对象做为成员变量:
    public enum Color{
        WHITE,BLACK,BLUE;
    }简单的可以认为相当于
    public class Color{
       private Color(){}
       public static final Color WHITE = new Color();
       public static final Color BLACK = new Color();
       public static final Color BLUE  = new Color();所以跟C语言中的枚举不同,C语言中的枚举应该是等同于#define的效果,java中的枚举就是编译器帮我们生成的几个静态类对象,可以拥有方法,属性
      

  2.   

    枚举可以被赋值啊:
    public enum Color{
        WHITE,BLACK,BLUE;
    }
    然后:
    Color c = Color.BLACK;
    每个枚举都有其下标,可以用Color.BLACK.ordinal()方法来访问到,WHITE,BLACK,BLUE的ordinal()值分别为0,1,2
      

  3.   

    昨天一直以为是枚举类使用的问题,今天早上又仔细的看了看代码,并尝试了其他方法,发现不是枚举类的问题,是二维数组的问题,后来我用ArrayList就解决了~注册CSDN将近10年,还是第一次发帖,可第一次发帖还把问题搞差了~真是无地自容~太丢脸了~谢谢“dr8737010”的回复,以后有问题还要请教呢~