2012-12-11 3 views
1

자바에서 OOP 소개 프로젝트의 일부로 주어진 과제를 이해하는 데 어려움을 겪고 있습니다. 모든 이름은 정확히 번역되지 않고 변경됩니다. 나는 다음과 같은 방법을 완료하도록 요청하고 있습니다 :자바, 배열에 객체를 삽입하고 부울을 반환하는 방법

public boolean insertHorse(Horse horse) { 
return true; 
} 

방법 서명이 변경 될 수 없습니다, 내가 할 수있는 방법에있는 클래스의 말의 배열에 말을 추가하기로되어있어 성공과 함께 삽입되면 true를 반환하고 그렇지 않으면 false를 반환합니다.

public boolean insertHorse(Horse horse) { 

    //Create a temp array with length equal to h 
    Horse[] temp = new Horse[this.horses.length+1]; 

    //copy the horses to the temp array 
    for (int i = 0; i < horses.length; i++){ 
     temp[i] = horses[i]; 
    } 

    //add the horse on the temp array 
    temp[temp.length-1] = horse; 

    //change the reference of the old array to the temp one 
    veiculos = temp; 
    return true; 

내 문제는, 어떻게 그리고 왜이 이제까지 거짓 줄 것입니다 : 그래서 이것은 내가 한 일입니까? 나는 농장의 말의 수에 제한이 있지만 방법을 호출하기 전에 확인할 수 있습니다. 이것은 나에게 나쁜 행동인가?

최고, 안부 주앙 실바

+0

"false"를 반환하고 아무것도하지 않으면 함수를 "올바르게"구현할 수 있습니다. –

+0

@HotLicks 그러면 반환 가능성을 잃을 것입니다. 배열의 허용 된 최대 말에 있는지 확인해야하는 과제의 컨텍스트에서 추측합니다. 그렇다면 -> false를 반환합니다. – Kirag

+0

여전히 "계약"을 만족시킨다 - 불변성은 보존 될 것이다. –

답변

1

나는 말의 수를 제외하고는 false를 반환해야하는 이유를 생각할 수 없습니다. 이론상 너무 많은 말들이 있다면 힙 공간이 부족할 수 있지만 그 상태는 아마도 프로그램이 어쨌든 충돌하게 만듭니다.

말의 수를이 함수의 외부에있는 대신이 함수에 넣는 것이 좋습니다. 그렇게하면 실수로 말을 더 넣을 수 없습니다.

+0

OutOfMemory를 실행하는 것 외에도 내부에서 검사를 수행 할 수 있습니다. 이는 false를 반환하는 유일한 이유입니다. 그러나 나는 말과 관련이없는 것을 확인하는 몇 가지 더 많은 것들을 가지고 있기 때문에 전화하기 전에 그들을 확인하는 것이 더 믿을 것이라고 믿을 것이다. (그들의 이름은 바뀌었지만 아이디어는 동일하다) – Kirag

0

당신은 항상 Horse 하나를위한 공간 배열을 할당 할 충분한 메모리를 사용할 수있을 것으로 가정하고있다.

OutOfMemoryError이 던져진 경우에 맞지 않는 한 가지 상황이 있습니다.

+1

의미가 있지만 그걸 염두에두고 'OutOfMemoryError'가 throw되면 false를 반환하는 대신 충돌이 발생하지 않습니까? – Kirag

+0

지금 당장 아니거나, 적어도 캐치하지 않는 경우. 그러나 아마도 오류를 기록하거나 사용자에게 제시 한 후에 프로그램을 종료하는 것이 좋습니다. –

+0

에 대해 검색해 보았습니다. 귀하가 말한 것처럼 나는 그것을 포착하더라도 프로그램을 끝내야하고 과제에서 고려하지 않았습니다. 질문은 정말로 언제 거짓으로 되돌아 가야 하는가에 따라 이것이 다른 해석보다 더 많은 해석이라고 생각합니다. 그럼에도 불구하고 답변 해 주셔서 감사합니다;) – Kirag

관련 문제