“for”循环对象 - 无法使其正常工作

时间:2015-02-24 14:36:26

标签: java

我目前在ArrayList<Target>中存储两个Target类型的对象。然后我将这些循环到名为t的Target变量。 t反过来是fullScreen.find(t)方法的参数。

如果我只使用一个目标,没有循环,没有ArrayList,这是完美的。当我使用它们时,它不起作用。

代码:

public void loopButton() {
    for(int i = 0; i < 1000; i++) {
        loopTargets();
        findButton();
        sleep();
    }
}

public void findButton() {
    try {
        ScreenRegion flix = fullScreen.find(t);
        ScreenRegion found = fullScreen.wait(t,5000);
        mouse.click(found.getCenter());
        System.out.println("Found");
    } catch(NullPointerException e) {
        System.out.println(e.getMessage());
    }
}

public Target loopTargets() {
    for(int i = 0; i < targets.size(); i++) {
       t = targets.get(i); 
    }
    return t;
}

2 个答案:

答案 0 :(得分:1)

您可能无法理解循环和函数调用的工作原理。

为了使其有效,请重新构建您的代码:

public void loopButton() {
    for(int i = 0; i < 1000; i++) {
        for(int i = 0; i < targets.size(); i++) {
            Target t = targets.get(i); 
            findButton(t);
        }
        sleep();
    }
}

public void findButton(Target t) {
    try {
        ScreenRegion flix = fullScreen.find(t);
        ScreenRegion found = fullScreen.wait(t,5000);
        mouse.click(found.getCenter());
        System.out.println("Found");
    } catch(NullPointerException e) {
        System.out.println(e.getMessage());
    }
}

您的代码存在的问题是,您的loopTarget方法总是返回列表中的最后一个Target

public Target loopTargets() {
    for(int i = 0; i < targets.size(); i++) {
       // sets target in each iteration, but does not use it
       t = targets.get(i); 
    }
    return t; // return the last target set
}

最后,迭代目标的最佳选择是使用foreach循环:

public void loopButton() {
    for(int i = 0; i < 1000; i++) {
        for(Target t : targets) {
            findButton(t);
        }
        sleep();
    }
}

答案 1 :(得分:0)

loopTargets始终返回targets中的最后一个元素。

您希望findButton中的每个target的{​​{1}}代码:

targets