1

インデックスを返そうとするとエラー (int を返す必要があります) が発生します。何が間違っているのかわかりません。Object 配列のインデックスを int と比較し、インデックス番号を返すにはどうすればよいですか?

//x starts at 10000 because the left most number is assumed to be at least a 1.
/**
 * Search for a book id within the Book object array
 * @param Book - Array of objects with book id, title, isbn, author, and category
 * @param numOfBooks - how many books are in the library
 * @param myBookID - The key to search for
 * @return the index of the array where the key matches
 */
public static int bookSearch (Object[] Book, int numOfBooks, int myBookID) {
    for (int x = 10000; x <= numOfBooks; x ++)
        if (Book[x].equals(myBookID))
            return x;
}
4

8 に答える 8

4

if 条件が一致しない可能性があるため、最後に余分なリターンを追加する必要があります。

public static int bookSearch (Object[] Book, int numOfBooks, int myBookID) {
    for (int x = 10000; x <= numOfBooks; x ++) {
        if (Book[x].equals(myBookID))
            return x;
    }

    return -1;
}

余談ですが、配列に最大 10000 個のアイテムがあると仮定するのではなく、配列の境界を確認することをお勧めします。lengthパラメータの 1 つを渡さないように、すべての配列にプロパティがあるという事実を利用することもできます。

public static int bookSearch (Object[] books, int myBookID) {
    if(books.length < 100000) return -1;

    for (int x = 10000; x <= books.length; x++) {
        if (Book[x].equals(myBookID))
            return x;
    }

    return -1;
}
于 2013-02-27T11:10:07.487 に答える
2

あなたはおそらく次のようなものを探しています:

public static int bookSearch (Book[] books, int myBookID) {
    for (int x = 0; x < books.length; x++)
        if (books[x].getId() == myBookID)
            return x;
    return -1; // not found
}
于 2013-02-27T11:11:35.543 に答える
2

JavaScriptでのみ動作しますが、

インデックス番号を簡単に見つけることができます。オブジェクト内の任意のプロパティによるオブジェクト配列リストから

function _findIndexByKeyValue(arraytosearch, key, valuetosearch) {
    for (var i = 0; i < arraytosearch.length; i++) {
        if (arraytosearch[i][key] == valuetosearch) {
            return i;
        }
    }
    return -1;
}

上記の方法をこのように適用します

var index = _findIndexByKeyValue(objectArrayList, "id", objectArrayList.id); // pass by value
if (index > -1) {
    // your code 
}

配列リスト

var objectArrayList = [{
    property1: 10,
    property2: 11,
    timestamp: "date-001",
    id: 1
}, {
    property1: 10,
    property2: 11,
    timestamp: "date-002",
    id: 2
}, {
    property1: 10,
    property2: 14,
    timestamp: "date-002",
    id: 3
}, {
    property1: 17,
    property2: 11,
    timestamp: "date-003",
    id: 4
}];
于 2015-10-28T04:39:43.297 に答える
0

条件を満たさずにループを終了した場合でも関数が int を返すように、ループの外側に return ステートメントが必要です。

于 2013-02-27T11:10:09.057 に答える
0

equals が一致しない場合に備えて、ループの外で値を返す必要があります。別の解決策は、見つからない場合に例外をスローすることです。

実際に値を返す (または例外をスローする) ことなく、戻り値の型が void ではない関数の最後に到達することはできません。

于 2013-02-27T11:10:34.053 に答える
0

これは、コンパイラがあなたよりも遠くを見るためであり、あなたの本が配列にない場合も考慮します. あなたは何を返しますか?

于 2013-02-27T11:11:29.783 に答える
0

equals が一致しない場合に備えて、ループの下に 2 番目の return を追加する必要があります。

于 2013-02-27T11:11:29.923 に答える
0

問題は、if 内で評価される式が常に false である場合、if ステートメント内の return に到達しない可能性があることです。

for ループの外側に「デフォルト」のリターンを追加するだけです。

于 2013-02-27T11:13:18.483 に答える