我如何根据循环中的序言迭代阵列列表1

  • 本文关键字:迭代 阵列 列表 何根 循环 java
  • 更新时间 :
  • 英文 :


我想在循环

中每次迭代一个数组列表。

理想输出:

向前[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);

最新更新