好的长话短说,我必须返回一个int值,但是当Linked List为空时却没有。我该怎么做?
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 ;
}
这不起作用。我该怎么办?
答案 0 :(得分:5)
你宁愿抛出一个IllegalArgumentException
: -
if(front == null) {
throw new IllegalArgumentException("List is empty");
}
答案 1 :(得分:3)
如果您的方法返回int
,则必须确定一个可接受的值来表示“无”。如0
或有效结果为>= 0
,请使用-1
等负值表示“无”。
或者,修改您的方法以返回Integer
对象,在这种情况下,您可以返回null
。
答案 2 :(得分:2)
您可以定义一个固定值,例如Integer.MIN_VALUE
,表示列表为空,或者将方法声明更改为public Integer countDuplicates()
,然后返回{{ 1}}当列表为空时。
答案 3 :(得分:1)
要保留现在的代码,您必须返回int,抛出异常或退出。
返回一个int:您必须将某个int值指定为“fail”值,并确保在“正常”执行期间不会遇到此值。
抛出异常:在另一个答案中详细说明 - 您已经将其击落。
- 醇>
退出程序......如果有意义的话。
最好的选择可能是更改代码 - 例如,让函数返回一个Integer,因此null
选项就在那里。肯定还有其他方法可以解决这个问题。
答案 4 :(得分:0)
如果您不想(或不能)抛出异常,请返回一些“异常值”,例如负数。例如,Java有很多indexOf(Object somethingToLookFor)
方法,如果找不到该项,则返回-1。
在你的例子中,-1作为例外工作,因为永远不会有-1重复。
就个人而言,我只会为空列表返回0。空列表有0个重复项。但如果规范坚持特殊情况,则返回-1。
答案 5 :(得分:0)
您可以将返回值从int更改为对象
public Object countDuplicates() {
if(////condition)
return ///int;
else
return null;
答案 6 :(得分:0)
您可以返回负值或将返回类型更改为字符串,并将结果解析为int。
答案 7 :(得分:-1)
public boolean isEmpty(){
if (head == null) return true;
else return false ;
}