0
Я закрою этот вопрос по какой-то причинепостроить квадранты с перечислением
Я закрою этот вопрос по какой-то причинепостроить квадранты с перечислением
Вы можете уменьшить количество кода, передав основные свойства в качестве свойств с каждым перечислением. signPair
использует некоторые элементарные арифметические свойства для вычисления ординала перевернутого квадранта.
public enum Quadrant {
Q1(true,true),
Q2(false, true),
Q3(false, false),
Q4(true, false);
private boolean xpos;
private boolean ypos;
Quadrant(boolean xpos, boolean ypos){
this.xpos = xpos;
this.ypos = ypos;
}
public boolean xPositive(){
return xpos;
}
public boolean yPositive(){
return ypos;
}
public String signPair(){
return "(" + (xpos ? "+" : "-") + "," + (ypos ? "+" : "-") + ")";
}
public Quadrant flipX(){
return values()[ordinal() + 1 - 2*(ordinal()%2)];
}
public static Quadrant fromInts(int x, int y){
if(x >= 0){
return y >= 0 ? Quadrant.Q1 : Quadrant.Q4;
} else {
return y >= 0 ? Quadrant.Q2 : Quadrant.Q3;
}
}
}
Вы также можете определить методы для каждого перечисления:
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());
}
}
удивительным ! но для меня это слишком много, мне нужно усваивать его медленно, чтобы получить полное понимание. Кроме того, как насчет основного метода? У меня есть некоторые требования о том, что должен делать основной метод. –
Я добавил тест, но вы тоже могли бы это сделать. – laune
@laune Хотя ваш ответ правильный, я хотел бы указать, что использование 'ordinal()' считается плохой практикой. –