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

您需要在最后添加一个额外的 return,因为您的 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属性这一事实,以避免传入您的参数之一:

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

循环外应该有一个return语句,这样即使在不满足条件的情况下退出循环,函数也会返回一个int。

于 2013-02-27T11:10:09.057 回答
0

您需要在循环外返回一个值,以防等号永远不匹配。另一种解决方案是如果找不到则抛出异常。

如果没有实际返回值(或抛出异常),则无法到达返回类型不是 void 的函数的末尾。

于 2013-02-27T11:10:34.053 回答
0

这是因为编译器比你看得更远,它还考虑了你的书不在数组中的情况。你还什么?

于 2013-02-27T11:11:29.783 回答
0

您必须在循环下添加第二个返回,以防等号永远不匹配。

于 2013-02-27T11:11:29.923 回答
0

问题是,如果在 if 中评估的表达式始终为 false,则可能永远无法达到 if 语句中的 return。

只需在 for 循环之外添加一个“默认”返回!

于 2013-02-27T11:13:18.483 回答