我为一个方法编写了以下代码,该方法应该删除数组中给定元素的所有出现并将其余元素向前移动t。我一直得到编译错误“这个方法必须返回布尔类型”,即使我已经返回布尔值。我之前也遇到过这个问题,但几天后运行代码后,它就运行了。
我的代码确实有问题吗?
public static boolean removeAll(int [] arr, int size, int elem){
int count=0;
for(int i=0;i<size;i++){
if(arr[i]==elem){
count++;
for(int j=i;j<size;j++){
arr[j]=arr[j+1];
}
System.out.println("Number of elements after insertion: "+(size-count));
return true;
}
}
if(count==0){
return false;
}
}
答案 0 :(得分:1)
明显的错误是,当count
非零时,您的方法不会返回任何内容。您甚至不需要条件 - 只需改为使用return count != 0
。
但是,您的代码中还有其他更微妙的错误:
arr.length()
boolean
不足以让调用者对修改后的数组执行任何操作。您需要返回剩余的长度。答案 1 :(得分:0)
返回需要与功能块保持一致。你不需要“if(count == 0)”,因为如果java应用程序已经获得了该代码,则意味着计数肯定为零 - 代码停止并在增加计数器的同一块中返回true。
public static boolean removeAll(int [] arr, int size, int elem){
int count=0;
for(int i=0;i<size;i++){
if(arr[i]==elem){
count++;
for(int j=i;j<size;j++){
arr[j]=arr[j+1];
}
System.out.println("Number of elements after insertion: "+(size-count));
return true;
}
}
return false;
}
但是,此代码只会从数组中删除一个元素,然后因为返回true而停止。我不确定这是不是你想要的。
答案 2 :(得分:0)
编译器抱怨,因为代码必须的每个逻辑“路由”都返回一个布尔值。
这意味着您现在必须检查所有代码的路径。当最后if
内的条件为假时会发生什么? (当count
与0不同时?)。
目前没有(或者更准确地说,您可以查看编译器放置的隐式return;
,如果您的函数的返回类型为void
,则只能使用它。
注意:在简单条件之后返回布尔值时,在返回中直接写入条件实际上更简洁。即:
return count != 0;