3

编辑:解决。显然,返回一个 0 作品!

好吧,长话短说,我必须返回一个 int 值,但当链接列表为空时什么也没有。我该怎么做?

public int countDuplicates() {

int duplicates = 0;

ListNode current = front;

int num = current.data;
current = current.next;

while(current != null) {
    if(current.data == num) {
        duplicates++;
    } else {
        num = current.data;
    }
    current = current.next;
}
return duplicates;
}

当我尝试这个时:

if(front == null) {
    return ;
}

这行不通。我能做些什么?

4

8 回答 8

5

你宁愿扔一个IllegalArgumentException: -

if(front == null) {
    throw new IllegalArgumentException("List is empty");
}
于 2013-01-22T20:23:03.503 回答
3

如果您的方法返回一个,int您必须确定一个可接受的值来表示“无”。例如,0如果有效结果为>= 0,则使用负值,例如-1表示“无”。

或者,修改您的方法以返回一个Integer对象,在这种情况下您可以返回null.

于 2013-01-22T20:25:20.027 回答
2

您可以定义一个固定值,例如Integer.MIN_VALUE表示列表为空,或者将方法的声明更改为public Integer countDuplicates(),并null在列表为空时返回。

于 2013-01-22T20:24:35.170 回答
1

要保持现在的代码,您必须返回一个 int、抛出异常或退出。

  1. 返回一个 int:您必须将某个 int 值指定为“失败”值,并确保在“正常”执行期间绝不会遇到此值。

  2. 抛出异常:在另一个答案中详细说明-您已经将其击落。

  3. 退出程序……如果这样做有意义的话。

最好的选择可能是更改代码 - 例如,使函数返回一个整数,因此该null选项就在那里。当然还有其他方法可以解决它。

于 2013-01-22T20:24:44.483 回答
0

如果您不想(或不能)抛出异常,请返回一些“异常值”,例如负数。例如,Java 有很多indexOf(Object somethingToLookFor)方法,如果找不到该项目,则返回 -1。

在您的示例中, -1 非常有效,因为永远不会有 -1 重复项。

就个人而言,我只会为空列表返回 0。一个空列表有 0 个重复项。但是,如果规范坚持某些特殊的东西,则返回 -1。

于 2013-01-22T20:25:56.923 回答
0

您可以像这样将返回值从 int 更改为 object

public Object countDuplicates() {
    if(////condition)
        return ///int;
    else 
        return null;
于 2013-01-22T20:27:02.953 回答
0

您可以返回负值或将返回类型更改为字符串并将结果解析为 int。

于 2013-01-22T20:29:43.850 回答
-1
public boolean isEmpty(){
    if (head == null) return true;
    else return false ;
}
于 2014-07-23T07:14:01.143 回答