我已经尝试过我所知道的所有问题来解决这个问题,但对我来说没什么好看的。下面是将返回线程名称的类中的代码。现在,如果线程的名称与提供给此方法的名称匹配,则它将返回该ArrayList的索引。问题是,bool是真的但是它似乎永远不会进入if语句。只是在它周围移动而是返回ERROR_NOTFOUND符号。这意味着程序忽略if语句的内容并转到第二个返回,完全绕过了第一次返回的机会。因此永远不会回到i;' ....
我已经调试了很多次但无济于事,几乎没有答案。随意运行任意代码并尝试自己。我完全剥离了这个项目,但仍然没有。然而,我应用下面的答案。
我的想法是它与使用的关键字有关。此外,在我寻找答案时,我还没有遇到任何有帮助的事情。所以,如果某个地方有答案,请告诉我,以便我能够提高我的搜索技能。
private static int searchThread(ArrayList<Thread> threads, String name) {
int i;
for (i = 0; i < threads.size(); i++) {
Thread thread = threads.get(i);
String temp = thread.getName();
Boolean bool = temp.equals(name);
if (bool) {
return i;
}
}
return ERROR_NOTFOUND;
}
编辑:为了进一步详细说明,我调试了这段代码。我也尝试清理和重建,认为这是问题所在,但都没有帮助。所以这是我的逻辑问题或缺乏理解使用的关键字,使用的UI线程或我不知道的其他东西的真实影响..代码部分在UI线程上运行的任何方式从来都不是问题到现在? if&#34;不会忽略if语句;返回i&#34;替换为&#34;返回1&#34;。然后它会成功返回1.
答案 0 :(得分:1)
您所描述的情景是不可能的。
return i
表示必须返回一些号码。
有两种可能的解释:
1)你没有检查“bool”状态,这是假的。
2)线程大小为零,因此程序不进入循环
答案 1 :(得分:1)
所以我似乎已经解决了我自己的问题,但我仍然感到困惑的是为什么第一次尝试无法返回&#39;我&#39;作为&#39;我&#39;能够在for循环和if语句中看到和编辑。
无论如何,下面是用于使其正常工作的代码。创建一个初始化为&#39; ERROR_NOTFOUND&#39;的补充int变量。一旦找到线程,就将其改为&#39; i&#39;的变量。刚刚找到了另一种看问题的方式。
再次,如果有人能指出为什么&#39;我&#39;在第一次尝试时无法归还,我很想知道,因为它看起来很奇怪..
编辑:不再那么困惑了。看起来它是一个编译器&amp;毕竟调试器问题。链接了解更多详情。 http://stackoverflow.com/questions/21805868private static int searchThread(ArrayList<Thread> threads, String name) {
int status = ERROR_NOTFOUND;
for (int i = 0; i < threads.size(); i++) {
Thread thread = threads.get(i);
String temp = thread.getName();
Boolean bool = temp.equals(name);
if (bool) {
status = i;
}
}
return status;
}
我的if语句已缩短为
if (thread.getName().equals(name)) {