2016-09-30 16 views
0

私は進行中のゲーム状態になったときにメソッドを使って最良の動きを提案するボードゲームに関するタスクを持っています。私はJavaでそれをする必要があります。Javaで未定義のメソッド動作を作成していますか?

タスクには奇妙な命令があります。通常の再生では発生しない状態が発生した場合、「このメソッドの動作は未定義です。 (あなたはチェスのようにこの状態を想像することができます。隣のフィールドに2人の王座があるボードを手に入れることは、実際のチェスゲームでは起こり得ません)。

質問:この命令は何を意味しますか?すでに同じ問題に直面している人はいますか?

まず、私はそのような状態で、例えばIllegalStateExceptionを投げるべきだと考えました。しかし、別の命令ラインによれば、私はプレーヤーの1つがすでにゲームに勝ったことを表す状態を持つボードを得るときにIllegalStateExceptionを投げなければならない、またはそれがドローです。

私はすでに定義されていない動作の定義を検索しましたが、この場合どのように使用できるのか分かりません。まったく、この種のケースにつながるJavaでこの種の動作を作成できますか?

+2

これは何でもできることを意味します。だから、 'IllegalStateException'を投げても問題ありません。 Btw、それはJAVAではなくJavaです。 –

+0

命令が正しくありません。 1つの選手は有効な状態です。 IllegalStateExceptionは、状態が無効な場合に使用します。 –

+0

メソッドに未定義の動作がある場合、呼び出されるべきでないと仮定して、 "UnsupportedOperationException"をスローすることができます。 –

答えて

4

問題が「この動作は定義されていません」と表示された場合、何かを行うと合理的に期待できないため、その状態をテストするつもりはないと言います。あなたが完了するのは実際には仕事ではありません。それはあなたにそれらのシナリオを心配しないように伝えるだけです。 OracleのドキュメントのはIllegalStateExceptionから

+0

あなたが正しいと思います。 :-)多分、私は単純なケースを複雑にしています。私は、コンパイラやJVMに依存したり、( "定義されていない振る舞い"の定義に書かれているように)他の奇妙な振る舞いを作成する、Javaで何らかの振る舞いを作り出すべきだと考えました。私はちょうど他の人がこれについて何を言っているのか見たいと思っています(私よりもJavaプログラミング/開発の経験が豊富かもしれません)。答えをありがとう。 +1 – Colossus

+0

上記の答えをサポートするために、「未定義の動作」というフレーズは、JavaSEのjavadocで頻繁に使用されます(例:[this](https://docs.oracle.com/javase/8/docs/api/java/メソッドが特定の状況で使用されることを意図したものではなく、その動作に関する保証ができないことを示すために、util/stream/StreamSupport.html#stream-java.util.function.Supplier-int-boolean-)コメント)そのような状況ではつまり、あなたはあなたが望むようにそのようなケースを扱うことができます。 :) – korolar

+0

私は単体テストをチェックして、これらの種類の違法状態がどこでもテストされていないことを発見しました。だから、誰も彼らに不思議ではない。私はこの答えを解決策としてマークします。私はこの "未定義の振る舞い"の場合を過度に複雑にしているようです。再度、感謝します。 – Colossus

0

:メソッドが違法または不適切なときに呼び出されました

シグナル。言い換えれば、Java環境またはJavaアプリケーションは、要求された操作に適切な状態ではありません。

だから私はあなたの志願では良い解決策ではないと思います。

+0

多分、しかし、タスクは与えられたゲーム状態で最良の動きを与えることです。したがって、ゲームが終了した場合、または調査する国家が違法であると思われる場合は、(不適切な時に)私のメソッドを呼び出すことを意味します。しかし、あなたの答えに感謝します。 – Colossus

+0

@Colossusすでに誰かが勝った場合、動きはありません。他の何かが実行される前にメソッドを呼び出すことは、不適切なタイミングとして定義できますが、この場合は定義できません。最高の動きがないときに例外を投げるのではなく、ゲームが終了して動きが残っていないと言ってください。 –

+0

@MeikVtune:ゲームの状態がゲームが終わったことを示すとき、IllegalStateExceptionをスローする必要があります。私の質問は主に、不当なゲームボードの状態を調べるときの未定義の動作に関連しています。とにかく、何かが行われた後に、不適切なタイミングが発生する可能性があります。たとえば、ゲームが終了した場合、次の(最良の)移動が何であるかを尋ねることは不適切です。それは理にかなっていないからです。州が違法であるときと同じ。しかし、私は他の解決策についても考えていきます。答えをありがとう。 – Colossus

1

「ImpossibleStateException」を書いて、そのケースが真であればこれを投げないのはなぜですか? 独自の例外クラスを書くことができるJavaの設計の一部です。なぜなら、未定義状態が発生したときに、それを書き込んで投げ捨てるのはなぜでしょうか。

私はあなたが一種のボードゲームについて話していると、私は想像することができます。多分、誰かがラムやVMで喧嘩して、ゲームを不正行為しようとします。

また、誰かが可能なすべての可能な値を持つすべての変数のように、プログラムのあらゆる可能な状態を深くテストすると、まったく意味がない約98%のケースがあります。

+0

はい、私は自分の例外クラスを書くことができることを知っています。私はちょうど私がJVMの実装やこれに類するものに依存するいくつかの奇妙なコードを書くべきだと思っています...そして、私はこのゲームケースでどのように書くべきか、他の人は誰に言いましたかJava開発の経験が豊富かもしれません。しかし、私は今、単純な "do-not-bother-with-this"のケースを複雑にしていると思います。しかし、あなたの答えに感謝します。 :-) – Colossus

関連する問題