2

同じ抽象クラスのすべての子である同様のクラスのリストがあります。また、使用するクラスに対応するブール値の配列もあります。

たとえば、次の規則で名前が付けられた一連のクラスがあります。

boolean[] classesOn = new boolean[4];
abstract class myClass {}

class myClass1 extends myClass { public void myClass1(float x, float y) ...}
class myClass2 extends myClass {}
class myClass3 extends myClass {}
class myClass4 extends myClass {}
...

アイデアは、対応するブール値がオンになっているクラスのみを使用することclassesOnです。これを行うには、forループを使用して反復しclassesOn、どれが であるかをチェックしますtrue。現在、次のコードがあります。

for (int i = 0; i < classesOn.length; i++) {
  if (classesOn[i]) {
    switch (i) {
      case 0: c = new myClass1(x, y); break;
      case 1: c = new myClass2(x, y); break;
...

現在、これは非常に非効率的であり、新しい拡張機能をmyClass追加すると、新しいケースを追加する必要があります。if (classesOn[i]) { c = new "myClass" + (i + 1) ();}その特定のクラスのインスタンスを作成するように言いたいだけです。

これどうやってするの?

(ところで、これらは単なる例であり、各クラスの実際の実装は大きく異なります)

私が現在取り組んでいる使用は、実際には処理であり、クラスでそれぞれが表現される複数の配色があります。しかし、将来的にはすべてのタイプのクラスでこれを行う方法にも興味があります。

私が現在取り組んでいる正確なコードは次のようになります-(しかし、一般的な答えに興味があります)

abstract class Scheme {
  float red,blue,green,x,y;
  String description;
  public void mousespot(){
    this.x = mouseX;
    this.y = mouseY;
    return;
  }
  public float getRed(){
    return this.red;
  }
  public float getBlue(){
    return this.blue;
  }
  public float getGreen(){
    return this.green;
  }
  public String getDescription(){
    fill(255,255,255);
    textSize(32);
    return this.description;
  }
}
class Scheme1 extends Scheme {
  public Scheme1(float x, float y) {
    this.description = "Green-Yellow-GW-Turqouise";
    this.red = map(x, 0, width, 0, 255);
    this.blue = map(y, 0, height, 0, 255);
    this.green = 255 * (float) dist(width/2, height/2, x, y) / (x / y);
  }
}

class Scheme2 extends Scheme {
  public Scheme2(float x, float y) {
    this.description = "Red-Yellow-Peach-Magenta";
    this.green = map(x, 0, width, 0, 255);
    this.blue = map(y, 0, height, 0, 255);
    this.red = 255 * (float) dist(width/2, height/2, x, y) / (x / y);
  }
}

そしてmouseDragged()メソッドで:

for (i = 0; i < colorschemesOn.length;i++) {
      if (colorschemesOn[i]) {
        switch(i) {
          case 0: 
            public Scheme selectedScheme = new Scheme1(mouseX,mouseY);
            break;
          case 1: 
            public Scheme selectedScheme = new Scheme2(mouseX,mouseY);
            break;
          case 2:
            public Scheme selectedScheme = new Scheme3(mouseX,mouseY);
            break;
          case 3:
            public Scheme selectedScheme = new Scheme4(mouseX,mouseY);
            break;
          case 4:
            public Scheme selectedScheme = new Scheme5(mouseX,mouseY);
            break;
          case 5:
            public Scheme selectedScheme = new Scheme6(mouseX,mouseY);
            break;
          case 6:
            public Scheme selectedScheme = new Scheme7(mouseX,mouseY);
            break;
          case 7:
            public Scheme selectedScheme = new Scheme8(mouseX,mouseY);
            break;
          case 8:
            public Scheme selectedScheme = new Scheme9(mouseX,mouseY);
            break;
          case 9:
            public Scheme selectedScheme = new Scheme10(mouseX,mouseY);
            break;
          case 10:
            public Scheme selectedScheme = new Scheme11(mouseX,mouseY);
            break;
          case 11:
            public Scheme selectedScheme = new Scheme12(mouseX,mouseY);
            break;
          default:
            public Scheme selectedScheme = new Scheme1(mouseX,mouseY);
            break;
        }
    }
}
4

2 に答える 2