我的方法在到达return语句时不会停止

时间:2017-04-23 18:04:13

标签: java

回答问题:我在不知不觉中两次调用该方法。

 private int findBranch(int branchNumber){
    if(branches.size() == 0){
        System.out.println("branches.size() == 0");
        return 0;
    }
    for(int i=0; i<branches.size(); i++){

        if(branches.get(i).getBranchNumber() == branchNumber){
            System.out.println("Branch found");
            return i;
        }
    }
    System.out.println();
    return -1;
}

此代码应该在ArrayList中搜索包含给定int的语言。

如果ArrayList为空,则应该返回0并停止。否则,它应该遍历ArrayList并检查每个元素是否存在给定的int。

如果找到int,它将返回它的索引。 如果未找到,则返回-1。

但是,我经常看到两个打印行的输出(“branches.size()== 0”和“找到分支”)

据我所知,这是不可能的。我做错了什么?

2 个答案:

答案 0 :(得分:3)

  

如果ArrayList为空,则应该返回0并停止

列表和数组是0索引的,因此第一个元素的索引为0。

如果列表为空,您应该返回其他内容,例如-1,以免与找到的元素位于第一个位置的情况混淆:

if (branches.size() == 0) {
  System.out.println("branches.size() == 0");
  return -1;
}

除此之外,这些println语句中的任何一个只会在每次执行方法时运行一次,因为它们后面会紧跟return语句。

答案 1 :(得分:0)

在不知不觉中,我两次调用该方法。

 public void addNewBranch(int branchNumber) {
    if(findBranch(branchNumber)<0 || branches.size() == 0) {
        branches.add(new Branch(branchNumber));
        lastBranchNumberAdded = branchNumber;
    }

    System.out.println("findbranch: "+ findBranch(branchNumber));
}

底部的System.out就在那里进行测试。我删除了它,正如预期的那样,我的所有问题都得到了解决。