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を返すだけです。空のリストには重複がありません。ただし、仕様で例外的なものが要求されている場合は、-1を返します。

于 2013-01-22T20:25:56.923 に答える
0

このように戻り値をintからオブジェクトに変更できます

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 に答える