2017-01-11 6 views
1

私のwhileループは終了しましたが、私の間違いは一度しか実行されないという問題がありますか?Java Array List/whileループカウントエラー

public class ear { 

    private ArrayList<Point> Master = new ArrayList<Point>(); 
    private ArrayList<Point> Shot = new ArrayList<Point>(); 

    public ear() { 
     addMaster(); 
     addShot(); 
     if (Shot.get(0).y == Master.get(0).y) { 
      while (Shot.get(0).x > Master.get(0).x) { 
       System.out.println("MasterY: " + Master.get(0).x); 
       System.out.println("ShotY: " + Shot.get(0).x); 
       moveShot(); 
      } 
     } 
    } 

    public void moveShot() { 
     Point p = new Point(); 
     for (int i = 0; i < Shot.size(); i++) { 
      Shot.get(i).x = p.x; 
      p.x -= 10; 
      p.y = 5; 
      Shot.set(i, p); 
     } 
    } 
} 

耳の目的は、iがショット値xを取得し、それの10を引く移動ショットでメインクラス で作成されます。

+1

'if(Shot.get(0).y == Shot.get(0).y)'これは常に真です。 –

+0

[Java命名規則](http://www.oracle.com/technetwork/java/codeconventions-135099.html)に従って、コードを他の人が読みやすくするようにしてください。クラス名はUpperCaseで始まり、変数とメソッド名はlowerCamelCaseで始まる必要があります。また、より良いヘルプのためには、有効な[mcve]または[sscce](http://sscce.org/)をポストしてください。インポートとメインメソッドを含める必要があります。 'addMaster()'または 'addShot () 'のように見えるか、' Point'がAWT ['Point'](https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html)クラスを参照するか、それともあなたのクラス – Frakcool

答えて

1

1)それは常に真であるとして、これは無意味です:あなたはShot.get(i).xに新しいPointを割り当てるよう

if (Shot.get(0).y == Shot.get(0).y) 

2)ここでPoint p = new Point(); Shot.get(i).x = p.x;は意味がありません。あなたが現在Shotを保存し、その値を変更するには、仲介値Pointを持っているしたい場合は、むしろ逆の作業を行う必要があります

p.x = Shot.get(i).x - 10; 
p.y = Shot.get(i).y + 5; 

し、現在のShotの新しい値としてpを設定します。

Shot.set(i, p); 
最後に

3)、xyは、あなたが直接仲介Pointオブジェクトを使用せずに、それらを変更することができShotの公共の場であれば:

public void moveShot() { 
    for (int i = 0; i < Shot.size(); i++) { 
     Shot.get(i).x -= 10; 
     Shot.get(i).y += 5; 
    } 
} 

インスタンスの公開フィールドはお勧めできませんが、ゲームでは時々使用されます。あなたは(デフォルトでは)次に(0, 0) であることをPointを作成moveShot()方法で

0

は、あなたが0に彼らのxの値を設定し、あなたのShotsのすべてを反復処理し、xの値は、もはやあなたのより大きいではありませんMaster x値なので、ループは終了します。