关于JAVA枚举类使用的错误

娜乌西卡的世界 2013-01-05 09:40:51

之前一直用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;
我现在就想达到这样的效果。
...全文
435 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
昨天一直以为是枚举类使用的问题,今天早上又仔细的看了看代码,并尝试了其他方法,发现不是枚举类的问题,是二维数组的问题,后来我用ArrayList就解决了~注册CSDN将近10年,还是第一次发帖,可第一次发帖还把问题搞差了~真是无地自容~太丢脸了~谢谢“dr8737010”的回复,以后有问题还要请教呢~
BadPattern 2013-01-06
  • 打赏
  • 举报
回复
枚举可以被赋值啊: public enum Color{ WHITE,BLACK,BLUE; } 然后: Color c = Color.BLACK; 每个枚举都有其下标,可以用Color.BLACK.ordinal()方法来访问到,WHITE,BLACK,BLUE的ordinal()值分别为0,1,2
BadPattern 2013-01-06
  • 打赏
  • 举报
回复
一堆代码看的我头疼 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中的枚举就是编译器帮我们生成的几个静态类对象,可以拥有方法,属性

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧