2017-01-12 10 views
1

オブジェクトを画面に配置しようとしていて、各オブジェクトが配置された後に、前のオブジェクトと重複しないようにするためにwhileループを使用して次のオブジェクトを置き換えます多くの私はそこに描画を停止しようとします。whileループで条件の数を変えることは可能ですか?

問題は、各オブジェクトを配置した後にwhileループの条件数を増やす必要があるため、加算の代わりに集計を使用するのと同様の方法があるかどうか疑問に思っていましたか?

編集:

すべてこのコードのオブジェクトの最大数よりも少ない各iためのループのための別内に含まれます。私はあなたが見ることができるforループを導入しようとしましたが、オブジェクトが別のオブジェクトを1つずつ交差しているかどうかをチェックするだけで、前のものと重なることがあります。

  if(i > 0) { 
       for (int j = i - 1; j >= 0; j--) { 
        while ((atomXPosition[i] < atomXPosition[j] + atomWidth[j] 
          && atomXPosition[i] + atomWidth[i] > atomXPosition[j] 
          && atomYPosition[i] + atomWidth[i] > atomYPosition[j] 
          && atomYPosition[i] < atomYPosition[j] + atomWidth[j])) { 
         atomXPosition[i] = (float) Math.random() * (screenWidth - atomWidth[i]); 
        } 
       } 
      } 
+2

これを視覚化するのに苦労します。あなたは現在、あなたが持っているコードのいくつかを表示することができます –

+0

whileループの条件は一様ではないようです。あなたが達成しようとしていることは不明です。 –

+0

whileループのすべての条件は、0と既に配置されているオブジェクトの数の間で繰り返される必要があります –

答えて

0

whileループ内で条件として関数を使用できます。この関数はArrayListのようなものを入力とし、ループのwhileの繰り返しごとにオブジェクトをArrayListに追加することができます。

1

なぜAtomクラスがないのですか?

import java.util.ArrayList; 
import java.util.List; 

public class Atom { 

    private static final int NUM_ATOMS = 20; 
    private static final int MAX_TRIES = 3; 

    public static void main(String[] args) { 
     List<Atom> atoms = new ArrayList<>(); 

     for (int i = 0; i < NUM_ATOMS; i++) { 
      Atom atom = new Atom(); 

      atoms.add(atom); 

      for (int tries = 0; tries < MAX_TRIES; tries++) { 
       if (atom.intersectsAny(atoms)) { 
        int randomX = //... 
        int randomY = //... 
        atom.moveTo(randomX, randomY); 
       } 
      } 
     } 
    } 

    private int x; 
    private int y; 
    private int width; 
    private int height; 

    public boolean intersectsAny(List<Atom> atoms) { 
     return atoms.stream().anyMatch(this::intersects); 
    } 

    private boolean intersects(Atom other) { 
     if (this == other) { 
      return false; 
     } 

     return //... check if this atom intersects other atom 
    } 

    public void moveTo(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 
} 
関連する問題