public int removeAll(int i){
while (head.getData() == i){
int value = head.getData();
head = head.getNext();
return value;
}
Node curr = head;
while (curr.getNext() != null){
if (curr.getNext().getData() != i){
int value = curr.getNext().getData();
curr.setNext(curr.getNext().getNext());
return value;
}
else {
curr = curr.getNext();
}
}
}
它一直说没有为函数指定返回,因为它嵌套而不是外部循环。我怎么能把它拿出去清除它?
答案 0 :(得分:0)
我认为你需要这个:
Node curr = head;
int value = -1; // change is here
while (curr.getNext() != null){
if (curr.getNext().getData() != i){
value = curr.getNext().getData(); // change is here
curr.setNext(curr.getNext().getNext());
break; // change is here
}
else {
curr = curr.getNext();
}
}
return value; // change is here
答案 1 :(得分:0)
将您的代码更改为:
public int removeAll(int i) {
int value = 0; //You can check in caller code like if it is 0 (or put your own value like -1) then do something
while (head.getData() == i) {
value = head.getData();
head = head.getNext();
}
Node curr = head;
while (curr.getNext() != null) {
if (curr.getNext().getData() != i){
value = curr.getNext().getData();
curr.setNext(curr.getNext().getNext());
}
else {
curr = curr.getNext(); //In this part, there is no return code
}
}
return value;
}
由于至少有一个条件可以满足,没有返回语句,你就会收到错误。这段代码应该可以正常工作。
答案 2 :(得分:0)
如果程序控件永远不会在removeAll
方法的任何while循环中到达,该怎么办?在这种情况下,您应该返回一个整数值,但程序永远不会到达任何return
语句。因为这个编译器给你错误。
在函数末尾添加return
语句。
答案 3 :(得分:0)
根据JLS 8.4.7,此程序无法编译,因为它确定方法可以正常完成:
如果声明一个方法具有返回类型,那么编译时 如果方法的主体可以正常完成,则会发生错误。
在你的情况下,程序可能会在没有输入任何for循环的情况下终止,因此不会返回任何内容。