我目前在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;
}
答案 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