1

私はJavaでナイトツアーの実装を行っていますが、現在、すべてが1つの巨大なコードの混乱に混乱しています。

ナイトツアーを解決するためのコードやメニューのメソッドなどを含むMainFrameというクラスがあります。

アルゴリズムのコードを含むKT(ナイトツアー用)という新しいクラスを作成したいのですが、それを行うには多くの問題があります。

クラスの誰かにコピーなどをしてほしくないので、ここにコードを投稿したくないので、簡単に説明します。

クラスKTでは、変数や配列などを宣言しました。printSolution、move、redo(バックトラッキング)などのメソッドがあります。

ただし、ボタンのコード(MainFrameで宣言されている)をどのように結び付けるかはわかりません。たとえば、8x8ボードに正しいソリューションを印刷するprintメソッドのループがあります。現在、メインフレームクラスにボタンがありますが、ボタンの新しいメソッドを作成するように求められています。

私はKTk= new KT();を持っています。次に、MainFrameを起動します。それは私が間違っているところですか、それとも私が理解できないほど愚かであるというのは本当に単純なことですか?

tl; drプログラムは、1つのクラスにすべてがある場合はうまく機能しますが、2つのクラスを作成して、すべてを「見栄えよく」したいと考えています。

4

2 に答える 2

2

クラスのactionPerformedメソッドでMainFrame、適切なメソッドを呼び出してソリューションを取得しますKT(ちなみに、名前をKnightsTour... readability countsに変更します)。

理想的には、すべてのロジック(モデル)をで適切なメソッドに分割しKnightsTour、すべての表示コードとボタン処理コード(ビューとコントローラー)をで分割する必要がありますMainFrame。それが難しい場合は、物事をメソッドに分割する方法(およびグローバルな状態で何をしているのか...嫌われている)を再考する必要があることを示す良い兆候です。

申し訳ありませんが、これ以上具体的にすることはできません。コードを投稿しなかったので、ちょっと手で縛られています。

于 2012-07-05T02:07:19.217 に答える
2

まず、KnightTourクラスに実際の名前を付けます。KnightTourのように。これを現金でコーディングしている場合、コードを読まなければならない次の人は、クラスをKTのようなものと呼んだ人を殴りたいと思うでしょう。

このクラスを作成して、ボタンやメニューを含むアプレットなどのGUIコントローラーから使用できるようにすることを検討してください。ただし、たとえば、プロンプトでコマンドを入力し、新しいクラスにそれらのコマンドを評価させる文字ベースのアプリケーションからも使用できるようにします。

これを提案する理由は、KnightTourクラスを作成する必要があるため、アプリの「ビジネスロジック」となるためです。つまり、KnightTourクラスは、ボタン、メニュー、GUI、テキストインターフェイス、またはそのようなものについて何も知らないはずです。KnightTourクラスについて、何を達成する必要があるかを考える必要があります。

KnightTourが何をしているのかよくわかりません。そこで、サポートする必要のある機能の種類についていくつかのアイデアを捨てます。私はすべてがチェス盤で行われると思いますか?

  1. 特定のボード位置(x、y)の状態(占有、非占有)を取得します
  2. 特定の場所(x、y)にチェスの駒(駒の列挙子)を置きます
  3. ピースの配置を検証します(ピース列挙子、位置x、y)
  4. 移動を提案し、ピース列挙子と場所を含むSuggestionオブジェクトを返します
  5. ボードをリセットして最初からやり直します。

ここで、「5,5にピースを配置する」というボタンを押すと、GUIコントローラーでそのイベントを処理し、「セットピース」メソッド(上記の#2)を呼び出してその作業を実行します。キャラクターベースのアプリケーションを使用している場合、「騎士を5,5に置く」と入力すると、そのテキストが解析され、上記の#2が呼び出されます。重要な点は、これらのユーザーインターフェイスの両方が同じKnightTourメソッドにアクセスして同じ作業を行うことです。

于 2012-07-05T02:27:11.750 に答える