2016-12-18 4 views
0

私は、フレーム内のボールのイメージをバウンスするJavaの「ピンボール」を作成しようとしています。私の下端は非常に奇妙な反応をしています。私のボールを反対方向に送るのではなく、ボールがボトムエッジをたどっています。誰かが私のコードが私が期待している通りに動作しない理由を説明してもらえますか?ピンボール

コード内のエラーは3番目のブロック(アスタリスク付き)内にあると思われますが、原因を特定できないと思います。

public void move(double rightEdge, double bottomEdge) 
{ 
    setX(getX()+ dx);     // move horizontally 

    if(getX() >= rightEdge - getRadius()) //hit right edge 
    { 
    setX(rightEdge - getRadius()); 
    dx = dx * -1; 
    } 

    if(getX() - getRadius() <= 0) 
    { 
    setX(getRadius()); 
    dx= dx*-1; 
    } 

    setY(getY() + dy); 


**if(getY() - getRadius() <=0) 
    { 
     setY(getRadius()); 
     dy = dy * -1; 
    }** 


    if(getY() >= bottomEdge - getRadius()); 
    { 
     setY(bottomEdge - getRadius()); 
     dy = dy * -1; 
    } 

} 

答えて

0
if(getY() >= bottomEdge - getRadius()); <--remove this semicolon 
{ 
     setY(bottomEdge - getRadius()); 
     dy = dy * -1; 
} 

あなたは余分なセミコロンを持っています。彼らが所属するif文と同じ行にあなたのカッコを入れておくコーディングスタイルをお勧めします。

if(something){ 
//code 
} 

ない

if(something) 
{ 
//code 
} 

私はあなたがそれがこれまで以上に等しい場合bottomEdgeにあるとyの値を設定するように見えるので、これだけでは、あなたの問題を解決することをわからないんだけどbottomEdge - getRadius()したがって、エッジからはね返る代わりに、一番下のエッジに当たったらy値を維持します。

+0

@JohnG Javaコードスタイルガイド、K&R Cスタイル、Google Javaスタイル、他のスタイルガイドについても考えることができます。いずれも、開きブラケットをそれ自身の行に入れません。括弧をつけるために行を追加することで、ブロックの開始位置を見るのが簡単にはなりません。画面やウィンドウに表示される情報の量が減ります。あなたは本当にあなたの選択の自由を持っていない、あなたの個人的な好みを主張するあなたに最高の奇妙な外観、最悪の就職機会を逃した。 – Durandal

+0

@Durandal、私はあなたの知恵に留意します。私はいつもこれを何よりももっと好みに感じています。いずれかのスタイルを使用することはできますが、中括弧が好きで、通常、コードを論理的に分割して、ほとんどのメソッドを適切な部分を見るのに十分な長さに保ちます。私は長い道のりを読むときにそれらの行を保存することが大きな違いを生むことは否定できません。私はあなたの入力に感謝し、私のコードをより "スタイル"にすることを試みます。もう一度あなたの有益な考えに感謝します。 – JohnG

関連する問題