2016-09-30 2 views
0

진행중인 게임 상태를 얻을 때 가장 좋은 방법을 제안하는 보드 게임에 대한 작업이 있습니다. Java로해야만합니다.Java에서 정의되지 않은 메서드 동작 만들기?

작업에 이상한 지시 사항이 있습니다. 정상적으로 재생할 수없는 상태가되면 "이 메서드의 동작은 정의되지 않았습니다." (이 체스와 같은이 상태를 상상할 수 있습니다. 인접한 필드에서 두 왕이있는 보드를 얻는 것은 실제 체스 게임에서는 불가능합니다.)

질문의 의미는 무엇입니까?이 명령의 의미는 무엇입니까? 이미 같은 문제에 직면 해있는 사람이 있습니까?

먼저, 나는 그런 상태에서 예를 들어 IllegalStateException을 던져야한다고 생각했습니다. 하지만 다른 명령 행에 따르면 나는 플레이어 중 하나가 이미 게임에서이긴 상태를 나타내는 보드를 얻을 때 IllegalStateException을 던져야합니다. 그렇지 않으면 무승부입니다.

이미 정의되지 않은 동작에 대한 정의를 검색했지만이 경우 어떻게 사용할 수 있는지 알 수 없습니다. Java에서 이런 종류의 동작을 만들 수 있습니까? 이런 종류의 경우에 연결할 수 있습니까?

+2

그것은 무엇이든 할 수 있다는 것을 의미합니다. 그래서 네,'IllegalStateException' 던져 괜찮을 것입니다. Btw, 자바가 아니라 자바. –

+0

지시 사항이 잘못되었습니다. 한 선수가 유효한 상태입니다. IllegalStateException는, 상태가 무효 인 경우에 사용합니다. –

+0

메서드에 정의되지 않은 동작이있는 경우이 메서드를 호출하면 안된다는 가정하에 "UnsupportedOperationException"을 throw 할 수 있습니다. –

답변

4

문제가 "이 동작이 정의되지 않았습니다"라고 말하면 단지 당신이 아무 것도 할 것으로 예상 할 수 없기 때문에 그 상태를 테스트하지 않을 것이라고 생각합니다. 실제로 완료해야 할 작업이 아닙니다. 단지 그 시나리오에 대해 걱정하지 말라는 의미 일뿐입니다. 오라클 문서의 IllegalStateException이에서

+0

당신이 옳았기를 바랍니다. :-) 어쩌면, 나는 단순한 경우를 복잡하게 만들었을 것이다.컴파일러 나 JVM에 의존하거나 ("정의되지 않은 동작"의 정의로 작성된 것처럼) 다른 이상한 동작을 만드는 자바에서 어떤 종류의 동작을 만들어야한다고 생각했습니다. 나는 다른 사람들이 이것 (자바 프로그래밍/개발에 대한 경험이 더 많을 수도 있음)에 관해서 무엇을 말하고 있는지보고 싶었다. 답변 해주셔서 감사합니다. +1 – Colossus

+0

위의 대답을 지원하기 위해 "정의되지 않은 동작"이라는 문구가 JavaSE javadocs에서 자주 사용됩니다 (예 : [this] (https://docs.oracle.com/javase/8/docs/api/java/) 참조). util/stream/StreamSupport.html # stream-java.util.function.Supplier-int-boolean-) comment) 메소드가 어떤 상황에서는 사용되지 않는다는 것을 나타내며, 그 행동에 대한 보장이 이루어지지 않음을 나타냅니다 그러한 상황에서. 즉, 원하는대로 이러한 사례를 처리 할 수 ​​있습니다. :) – korolar

+0

나는 또한 단위 테스트를 점검하고 이러한 종류의 불법 국가가 어디에서나 테스트되지 않는다는 사실을 발견했습니다. 그래서 아무도 그들에 대해 궁금하지 않습니다. 나는이 해답을 해결책으로 표시한다. 내가이 "정의되지 않은 행동"의 경우를 지나치게 복잡하게 만든 것 같습니다. 다시 한번 감사드립니다. – Colossus

0

: 부정 또는 올바르지 않은 때에 메소드가 불려 간

신호. 즉, Java 환경 또는 Java 응용 프로그램이 요청 된 작업에 적절한 상태가 아닙니다.

그래서 나는 당신의 자세로는 좋은 해결책이 아니라고 생각합니다.

+0

어쩌면, 그러나 주어진 게임 상태에서 최상의 움직임을 제공하는 것이 임무입니다. 그러므로 게임이 끝났거나 검사 할 상태가 불법이라면 이는 (최선의) 움직임을 제안 할 수 없기 때문에 의사가 말하는 것처럼 부적절한 시간에 내 방법을 호출하기를 원한다는 것을 의미합니다. 그러나 당신의 대답에 감사드립니다. – Colossus

+0

@ Colossus 누군가가 이미 이겼다면 아무런 움직임도 남지 않았습니다. 다른 것을하기 전에 메소드를 호출하는 것은 부적절한 타이밍으로 정의 할 수 있지만이 경우는 아닙니다. 최선의 움직임이 없을 때 예외를 던지기보다는 게임이 끝났고 아무런 움직임도 없다고 말하십시오. –

+0

@MeikVtune : 게임 상태가 게임이 끝났다는 것을 보여줄 때 IllegalStateException을 throw해야하는 작업에 따라 선택 사항이 없습니다. 내 질문은 주로 게임 보드 상태를 검사 할 때 정의되지 않은 동작과 관련이 있습니다. 어쨌든 부적절한 타이밍은 어떤 일이 생기기 전과 후에 발생할 수 있습니다. 예를 들어, 게임이 끝나면 다음 (최선) 움직임이 무엇인지 물어 보는 것은 적절하지 않습니다. 왜냐하면 그것은 의미가 없기 때문입니다. 주정부가 불법 인 경우. 그러나 다른 해결책에 대해서도 생각할 것입니다. 답변 해주셔서 감사합니다. – Colossus

1

왜 "ImpossibleStateException"을 쓰지 않고이 사건이 사실이라면 왜 던져 주겠습니까? 자체의 예외 클래스를 작성할 수있는 Java 설계의 일부이므로 정의되지 않은 상태가 발생하는 경우 예외 클래스를 작성하고 포기하지 않는 것이 좋습니다.

내가 말한 상태가 어떻게 만들어 졌는지 잘 모르겠다. 보드 게임의 종류에 대해 말하면 아마 상상할 수있다. 아마 누군가가 램이나 VM으로 놀아서 게임을 속이거나 해킹하려고 시도 할 것이다.

누군가가 게임의 모든 가능한 값을 가진 모든 변수처럼 프로그램의 가능한 모든 상태를 자세히 테스트 할 경우 약 98 %의 사례가 전혀 이해가되지 않습니다.

+0

예, 저는 제 자신의 예외 클래스를 작성할 수 있음을 알고 있습니다. 방금 JVM 구현에 의존하는 이상한 코드를 작성해야한다고 생각했습니다.이 게임 케이스에 어떻게 써야하는지 궁금합니다. Java 개발 경험이 더 많을 수 있습니다. 하지만 지금은 단순한 "do-not-bother-with-this"사례를 복잡하게 만들었다 고 생각합니다. 그러나 당신의 대답에 감사드립니다. :-) – Colossus