关于测试用例失败的Java实践分配混淆

时间:2014-07-14 11:38:00

标签: java algorithm

我正在编写一个名为编码蝙蝠的网站上的编码问题,但无法弄清楚其中一个测试失败的原因。

- 问题 “给定一组int,如果.. 1,2,3,..在某个数组中出现,则返回true。”

http://codingbat.com/prob/p136041

public boolean array123(int[] nums) {
  boolean result = false;
  for(int i=0; i < nums.length-2; i++){
    if (nums[i] == 1 && nums[i+1] == 2 && nums[i+2] == 3){
      result = true;
    } else{ result = false;}
  }
  return result;
}

除此之外,所有测试均通过:        array123({1, 1, 2, 3, 1}) → true但我的代码实际上正在返回false。为什么呢?

4 个答案:

答案 0 :(得分:5)

当您发现序列出现一次时,应立即返回true。

public boolean array123(int[] nums) {
  for(int i=0; i < nums.length-2; i++){
    if (nums[i] == 1 && nums[i+1] == 2 && nums[i+2] == 3)
      return true;
  }
  return false;
}

答案 1 :(得分:3)

您需要返回结果,或者在获得肯定结果时退出循环。您使用return获得了其他答案。这是一个最后带有return语句的版本:

public boolean array123(int[] nums) {
    boolean result = false;
    for(int i=0; i < nums.length-2; i++){
        if (nums[i] == 1 && nums[i+1] == 2 && nums[i+2] == 3){
            result = true;
            break;
        }
    }
    return result;
}

您的代码失败,因为result在倒数第二次迭代时正确设置为true,但在最后一次迭代时返回false。如果您不关心优化,您也可以简单地删除if语句的else部分。

public boolean array123(int[] nums) {
    boolean result = false;
    for(int i=0; i < nums.length-2; i++){
        if (nums[i] == 1 && nums[i+1] == 2 && nums[i+2] == 3){
            result = true;
        }
    }
    return result;
}

如果它遇到了您的序列,则会将result设置为true,并且永远无法返回false。虽然你将跑到数字序列的末尾 - 不是最佳的。

答案 2 :(得分:0)

您不需要else语句,您已经将结果初始化为false。这是修复后的代码。

public boolean array123(int[] nums) {
  for(int i=0; i < nums.length-2; i++){
    if (nums[i] == 1 && nums[i+1] == 2 && nums[i+2] == 3){
      return true;
    }
  }
  return false;
}

答案 3 :(得分:0)

     boolean result = false;
      for(int i=0; i <= nums.length-2; i++){
         if (nums[i] == 1 && nums[i+1] == 2 && nums[i+2] == 3)
         result = true;
     }

只有这样就足够了。您错误地提出了其他声明。在找到1,2,3时,它设置 result = true ,但随后它移动到2,3,1然后进入其他并设置 <=>>

相关问题