public enum Quadrant {
Q1(true,true){
public Quadrant flipX(){ return Quadrant.Q2; }
public String signPair(){ return "(+,+)"; }
},
Q2(false, true){
public Quadrant flipX(){ return Quadrant.Q1; }
public String signPair(){ return "(-,+)"; }
},
Q3(false, false){
public Quadrant flipX(){ return Quadrant.Q4; }
public String signPair(){ return "(-,-)"; }
},
Q4(true, false){
public Quadrant flipX(){ return Quadrant.Q3; }
public String signPair(){ return "(+,-)"; }
};
//...
public abstract String signPair();
public abstract Quadrant flipX();
//...
}
这里有一个测试:
public static void main(String[] args) {
for( Quadrant q: Quadrant.values() ){
System.out.println( q );
System.out.println( q.xPositive() );
System.out.println( q.yPositive() );
System.out.println( q.signPair() );
System.out.println( q.flipX() );
}
for( int x = -1; x <= 1; ++x ){
for( int y = -1; y <= 1; ++y ){
System.out.println( Quadrant.fromInts(x, y) );
}
}
}
要运行所需的主进程参数,请执行以下操作:
public static void main(String[] args) {
for( int i = 2; i <= args.length; i++ ){
int x = Integer.parseInt( args[i-2] );
int y = Integer.parseInt( args[i-1] );
Quadrant q = Quadrant.fromInts(x, y);
System.out.println("( + x + "," + y + ") in " + q + " " + q.signPair());
}
}
# 1 楼答案
通过将基本属性作为属性传递给每个枚举,可以减少代码量
signPair
使用一些基本的算术属性来计算翻转象限的序号还可以为每个枚举定义方法:
这里有一个测试:
要运行所需的主进程参数,请执行以下操作: