2016-05-03 15 views
-2

私は現在、以前のオブジェクトが真を返すブール変数の条件を満たすと、新しいオブジェクトを生成するプログラムを書いています。私が抱えている問題は、私は複数の異なる形で作業しているということです。このプログラムは、第2のタイプの形状が表示されるまで完全に機能する。その時点で、boolean isDone()条件を満たす2つの図形があります。ブール変数をfalse /そのデフォルト条件に戻す簡単な方法はありますか?Javaのブール変数をリセットする

コード:

if (baserectangle.isDone()) { 
    int meowchoice = (int) Math.round(2 * Math.random()); 
    if (meowchoice < 1) { 
     baserectangle = (new Rectangle(10, 25, position, m, n)); 
     scene1.add(baserectangle); 
    } 
    if (meowchoice >= 1) { 
     basesquare = (new Square(10, 25, position, m, n)); 
     scene1.add(basesquare);  
    }} 
else if (basesquare.isDone()) { 
    int meowchoice2 = (int) Math.round(2 * Math.random()); 
    if (meowchoice2 < 1) { 
     baserectangle = (new Rectangle(10, 25, position, m, n)); 
     scene1.add(baserectangle); 
    } 
    if (meowchoice2 >= 1) { 
     basesquare = (new Square(10, 25, position, m, n)); 
     scene1.add(basesquare); 
    } 


} 

即ちプログラムがbaserectangle又はbasesquareで始まり、その形状は、そのisDoneの条件を満たしたときに、ランダムに新しいbaserectangle又はbasesquareを生成します。問題は、ベースレクタングルとベーススクエアの両方が存在すると、一度に複数のシェイプを連続的に生成することです。

isDone()の実装:

public boolean isDone() { 
    if (this.y < 2) { 
     return true; 
    } 
    if (i > 0 && position [i-1][j] != 0) { 
    return true; 
    } 
    else return false; 
} 

this.y Yは平面上の図形の座標であり、iおよびjは、アレイ内のオブジェクトの位置です。

あなたはたとえば alreadyDoneのために、あなたのクラスで別のvariabileを入れて、それは例えば、他の形状を生成することがあるかどうかを決定するためにそれを使用することができ
+0

フィールドは静的ですか? – Makoto

+0

静的なのは、図形の色だけです。 xとyの座標は、位置配列内の位置が変わるのと同じように変化します。 – JavaStudent90000

+1

'isDone'を支配するものは?あなたはそれの実装を含めることができますか? – Makoto

答えて

0

public boolean isDone() { 
if (this.y < 2) { 
    alreadyDone = true; 
    return true; 
} 
if (i > 0 && position [i-1][j] != 0) { 
    alreadyDone = true; 
    return true; 
} 
else return false; 
} 

をし、チェック中:

if (!baserectangle.alreadyDone && baserectangle.isDone()) { ... 

は、私はこの

0

プログラムの作業を行うには良い方法があると確信している、これは単なる一例である点に注意してください第2のタイプの形状が表示されるまで完全に表示される。その時点で、ブールisDone()条件を満たす2つの図形があります。

確かに2つの図形があります。おそらく問題はおそらくの1つがであることがif-else ifの組み合わせで確認されているということだけです。

おそらくのいずれかの形状が別のif文で行われているかどうかを確認する必要があります。しかし

// Rectangle is done 
if (baserectangle.isDone()) { 
    int meowchoice = (int) Math.round(2 * Math.random()); 
    if (meowchoice < 1) { 
     baserectangle = (new Rectangle(10, 25, position, m, n)); 
     scene1.add(baserectangle); 
    } 
    else if (meowchoice >= 1) { 
     basesquare = (new Square(10, 25, position, m, n)); 
     scene1.add(basesquare);  
    } 
} 

// Square is done 
if (basesquare.isDone()) { 
    int meowchoice2 = (int) Math.round(2 * Math.random()); 
    if (meowchoice2 < 1) { 
     baserectangle = (new Rectangle(10, 25, position, m, n)); 
     scene1.add(baserectangle); 
    } 
    else if (meowchoice2 >= 1) { 
     basesquare = (new Square(10, 25, position, m, n)); 
     scene1.add(basesquare); 
    } 
} 

、これら二つのif文の内容は、あなたがそう

// Rectangle or Square are done 
if (baserectangle.isDone() || basesquare.isDone()) { 
    int meowchoice = (int) Math.round(2 * Math.random()); 
    if (meowchoice < 1) { 
     baserectangle = (new Rectangle(10, 25, position, m, n)); 
     scene1.add(baserectangle); 
    } 
    else if (meowchoice >= 1) { 
     basesquare = (new Square(10, 25, position, m, n)); 
     scene1.add(basesquare);  
    } 
} 

のように行うことができますので、正確に同じであり、あなたはisDone方法を短くしたい場合は...

public boolean isDone() { 
    return (this.y < 2) || (i > 0 && position [i-1][j] != 0); 
} 
関連する問題