我正在编写一个名为编码蝙蝠的网站上的编码问题,但无法弄清楚其中一个测试失败的原因。
- 问题 “给定一组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
。为什么呢?
答案 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然后进入其他并设置 <=>>
。