2013-02-27 3 views
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; 
} 
+1

같은 방법 위에 적용합니다. Java에서는 변수에 소문자를 사용해야합니다. – m0skit0

+0

그게 내 강사가 정확한 변수 이름을 사용하여 지침을 입력 한 방법입니다 ... 반대하고 싶지 않았습니다. – trama

+0

강사/강좌를 변경하는 것이 좋습니다. – m0skit0

답변

4

가능한 추가 조건이 일치하지 않기 때문에 마지막에 추가 수익을 추가해야합니다. 보조 노트에

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 개의 항목을 가지고 있다고 가정 반대로, 배열의 경계를 확인 할 수 있습니다. 함수가 INT 경우에도를 반환하도록

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; 
} 
+0

OH DUH! 정말 고맙습니다! 내가 시도한 모든 것들 중에서 왜 그 것이 그 중 하나가 아닌지 모르겠다. – trama

+1

'Book [x]'는 결코 '-1'을 반환하지 않을 것이다. 원시적 인'int myBookID'입니다. – jlordo

+0

@jlordo - 그는 객체 배열을 전달하기 때문에 Integers와 int를 비교한다고 가정합니다. int 인수는 자동 저장됩니다. – Perception

0

루프 외부의 return 문이 있어야한다 : 당신은 또한 당신의 매개 변수 중 하나를 전달 피하기 위해, 모든 배열은 length 속성을 가지고 있다는 사실을 이용할 수 있습니다 루프는 조건을 만족하지 않고 종료됩니다.

0

등호가 일치하지 않는 경우 루프 밖의 값을 반환해야합니다. 다른 해결책은 발견되지 않는 경우 예외를 throw하는 것입니다.

실제로 값을 반환하지 않고 (또는 예외를 던지면서) 반환 유형이 void가 아닌 함수의 끝 부분을 가져올 수 없습니다.

0

이것은 컴파일러가 너보다 멀리 보일뿐만 아니라 책이 배열에없는 경우도 고려하기 때문입니다. 무엇을 반환합니까 다음?

0

등호가 일치하지 않는 경우 루프에서 두 번째 리턴을 추가해야합니다.

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 
} 
0

문제는 항상 false 인 경우 표현은 내부 평가하면 if 문 내부의 반환에 도달하지 않을 수도 있다는 점이다.

for 루프 외부에 "default"return을 추가하십시오!

2

자바 스크립트에서만 작동합니다.

색인 번호는 쉽게 찾을 수 있습니다. 객체의 프로퍼티에 의해 객체 배열 목록에서

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

는 Book.length에 의해 배열의 길이를 얻을 수 있습니다 자바에서는이

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 
}]; 
관련 문제