我想在循环
中每次迭代一个数组列表。理想输出:
向前[1]
停止[1]
向前[2]
停止[2]
向前[3]
等....
如果条件不再正确,并且条件是正确的,则上面的代码只会从向前变为停止。
我当前的输出:
向前[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
停止[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
现在,此程序旨在存储机器人的方向和动作
我也尝试了thread.sleep()方法,但这阻止了机器人再次改变方向直到睡眠结束。
任何帮助将不胜感激
代码:
ArrayList <Integer> forward = new ArrayList<Integer>();
ArrayList <Integer> stop = new ArrayList<Integer>();
private void follow()
while(System.currentTimeMillis() < end) {
if (steve.Obstacle(true)){ // if a obstacle is found.
stop.add(1);
}
else if(steve.stop(true)) {
forward.add(1);
}
System.out.println("forward "+forward);
System.out.println("stop "+stop);
}
第一部分:以您寻找的方式打印数组可以这样完成:
int length = forward.size();
for (int i=0; i < length; i++) {
System.out.println("forward[" +i + "]: " + forward.get(i)));
System.out.println("stop[" +i + "]: " + stop.get(i)));
旁注:当然,只有在两个列表都具有恰好相同长度时起作用。(并在循环之前预先计算长度可节省一点点的运行时开销)
但是:那对您不起作用;由于您的代码只是不是做任何有用的事情。我认为您需要一些更改,例如:
while(System.currentTimeMillis() < end) {
if (steve.Obstacle(true)){ // if a obstacle is found.
stop.add(1);
}
else if(steve.stop(true)) {
forward.add(1);
}
Thread.sleep(whatever);
}
重点是:如果您不在此处使用睡眠,则您的循环以完整的CPU速度运行,并且只能在这些列表中添加值;因此,您可能最终得到了一个条目的数百万的列表!
但是:即使我们放慢脚步;您不能将这些列表条目联系起来;因为您仅将11111111放入两个列表中。告诉你...什么都没有。所以,为什么不这样做:
List<String> movements = new ArrayList<>();
while(System.currentTimeMillis() < end) {
if (steve.Obstacle(true)){ // if a obstacle is found.
movements.add("stopped");
}
else if(steve.stop(true)) {
movements.add("forward");
}
Thread.sleep(whatever);
}
打印它时,您会得到
的东西 stopped stopped stopped forward forward stopped ...
左右。鉴于您的最后评论:课程只有在有更多的情况下,整个过程才有意义!您是说睡眠停止了您的机器人 - 然后出了点问题。您看到 - 在此循环中,是否有任何代码更改机器人在做什么?我的假设是:您的机器人正在做事;您想在这样做时使用此循环读取其状态。
每次都添加一个。您必须每次将其递增并添加。
private void follow()
int stopInt = 0;
int forwardInt = 0;
while(System.currentTimeMillis() < end) {
if (steve.Obstacle(true)){
stop.add(stopInt);
stopInt++;
}
else if(steve.stop(true)) {
forward.add(forwardInt);
forwardInt++;
}
System.out.println("forward "+forward);
System.out.println("stop "+stop);