我遇到的问题是我的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);
}
}
}
在主类中创建耳朵的对象 在移动镜头中,我获得镜头值x并减去其中的10。
答案 0 :(得分:1)
1)这是无用的,因为它总是如此:
if (Shot.get(0).y == Shot.get(0).y)
2)在将Point p = new Point(); Shot.get(i).x = p.x;
分配给Point
时,Shot.get(i).x
没有任何意义。如果您希望使用中间值Point
来存储当前Shot
并更改其值,则应该采取相反的措施:
p.x = Shot.get(i).x - 10;
p.y = Shot.get(i).y + 5;
然后将p
设置为当前Shot
的新值:
Shot.set(i, p);
3)最后,如果x
和y
是Shot
的公开字段,您可以直接更改它们,而无需使用中间Point
对象:
public void moveShot() {
for (int i = 0; i < Shot.size(); i++) {
Shot.get(i).x -= 10;
Shot.get(i).y += 5;
}
}
不建议使用实例公共字段,但在游戏中有时会使用它。
答案 1 :(得分:0)
在moveShot()
方法中,您创建的Point
(默认情况下)位于(0, 0)
然后,遍历所有Shots
,将其x值设置为0.然后,x值不再大于Master
x值,因此循环结束