虽然我已添加“return true”& “布尔方法” “return false”,但我不断收到错误 “添加返回” 。有谁知道问题是什么?
问题是:“给定一个可能包含重复项的未排序数组。还给出一个小于数组大小的数字k。编写一个函数,如果数组包含k距离内的重复项,则返回true。”
public static void main (String[] args){
int[] arr = {2, 5, 7, 4, 2, 7, 8, 5, 4, 9};
int k = 3;
System.out.println(duplicateKDistance(arr, k));
}
public static boolean duplicateKDistance(int[] array, int m){
for (int i=0; i<array.length; i++){
for(int j=i+1; j<=m; ){ // if you add "j++", it will be dead code here :)
if (array[i] == array[j])
return true;
else
return false;
}
}
}
}
答案 0 :(得分:1)
您需要在For循环之外添加返回。当整个程序假定您进入循环时,您的设置方式。如果您从未输入For循环,程序将永远不会返回。因此,Java希望您将返回false置于第一个for循环之外。您可能应该取出其他返回false ....因为如果您的if语句不为真,它将始终触发。通过在循环外面返回false,你现在可以捕获并暗示你为什么需要else的逻辑,而不是在第二个for循环中输入if语句。
public static boolean duplicateKDistance(int[] array, int m){
for (int i=0; i<array.length; i++){
for(int j=i+1; j<=m; j++){
if (array[i] == array[j])
return true;
}
}
return false;
}
答案 1 :(得分:1)
您需要更改逻辑尝试以下代码
public static void main(String[] args) {
int[] arr = { 2, 5, 7, 4, 2, 7, 8, 5, 4, 9 };
int k = 3;
System.out.println(FindZero.duplicateKDistance(arr, k));
}
public static boolean duplicateKDistance(int[] array, int m) {
boolean flag = false;
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j <= m;) { // if you add "j++", it will be dead
// code here :)
if (array[i] == array[j]) {
flag = true;
break;
}
}
}
return flag;
}
答案 2 :(得分:0)
如果您输入任何循环,则只返回一个值。
如果从未满足任何循环条件,则永远不会达到return
语句。只需在方法的末尾添加一个:
public static boolean duplicateKDistance(int[] array, int m){
for (int i=0; i<array.length; i++){
for(int j=i+1; j<=m; ){ // if you add "j++", it will be dead code here :)
if (array[i] == array[j])
return true;
else
return false;
}
}
return false;
}