2012-04-18 21 views
1

私はちょっとプログラミングに新しく、再帰的メソッドを実行するのに役立つ必要があります.2次元配列のランダムな空間を選んで空きがあるかどうかを確認する方法があります。スペースが空いている場合、私はそのスペースを使用したいが、そうでない場合、私はあなたのコメントで述べた特定の問題がfirstSpaceためである2D array.ThanksはJavaの再帰メソッドの助けを必要とします

import java.io.* ; 
import java.util.ArrayList ; 
public class WordSearchPuzzle 
{ 
    private char[][] puzzle ; 
    private ArrayList<String> puzzleWords ; 
    private int letterCount = 0 ; 
    private int gridDimensions; 

    public WordSearchPuzzle(ArrayList<String> userSpecifiedWords) 
    { 
     this.puzzleWords = userSpecifiedWords ; 

    } 

    private void createPuzzleGrid() 
    { 
     int i, itemLength; 
     String item; 
     for (i = 0; i < puzzleWords.size(); i++) { 
      item = puzzleWords.get(i); 
      itemLength = item.length(); 
      letterCount = letterCount + itemLength; 
     } 
     gridDimensions = letterCount * 2; 
     puzzle = new char[gridDimensions][gridDimensions] ; 
    } 

    private void generateWordSearchPuzzle() 
    { 

    } 


    public void firstSpace(String Word) 
     { 
      int row, column; 
      row = (int)(Math.random() * gridDimensions +1); 
      column = (int)(Math.random() * gridDimensions +1); 
      if(puzzle[row][column] != ' '){ 
       firstSpace(); 
      } 
     } 
+0

あなたの問題は何ですか? – Jim

+0

これは、再帰性が良い、あるいはまともな解決策であるという問題はないと言えます。ちょっとループを作ってランダムな空間を選び、それが空いているかどうかを確認してください。 – Mads

+0

問題とは何ですか?また、退室条件は何ですか?境界を定義しましたか? – Phani

答えて

0

インデックスの計算に1を追加する必要はなく、おそらく配列外の例外が発生する可能性があります。しかし、それはあなたのgridDimensionsの定義に依存します。

コメントに指定した問題は、Javaコンパイラが 'void firstSpace()'という名前のメソッドを検索しようとしたためです。これは 'firstSpace(String word)を無効にする'の別のメソッドです。

public void firstSpace(String word) 
{ 
    int row, column; 

    // No need to add 1, Java arrays are accessed with the first index 
    // being 0. Math.random() returns from 0 up to but not including 1.0. 
    // e.g. array size = 50, min index = 0, max index = 49 
    // Lets say you get very close to 1 e.g. 0.9999, then 
    // 0.9999 * 50 = 49.995 (after integer truncating you have 49) 
    row = (int)(Math.random() * gridDimensions); 
    column = (int)(Math.random() * gridDimensions); 

    if(puzzle[row][column] != ' ') { 
     // If this element is not "empty" then run the method again 
     // using recursion. null might be a better choice to compare 
     // to depending on how you initialized the array. 
     firstSpace(word); 
    } else { 
     // Otherwise we're finished and we can set the array element 
     // to the new word. 

     // (Assumed post condition (you might want to do something else once you 
     // find a blank index)) 
     puzzle[row][column] = word; 
    } 
} 
+0

Simonに助けてくれてありがとうございました。これまでのコード全体を表示するコードを編集します。 – user1323808

+0

あなたの行と列の計算に+1を追加する必要はありません。私はコードを編集し、なぜコメントで、うまくいけばそれは理解できると説明した。 あなたが投稿した新しいコードは、私が期待したものとは大きく異なっています。私はそれが 'n x n'文字列配列だと思っていましたが、基本的に 'n x 1'文字列配列の 'n x n'文字配列を持っています。 –

+0

助けを借りて100万円ありがとうございます。ちょうど最後の質問があります。再帰部分にスペースがないと新しい単語を入力するように促されます。なぜelse部分のパズルにコードのこの部分を置くのか分かりません[行] [列] =単語;それらは互換性のない型です。 – user1323808

2

に新しいランダムなスペースを選びたいですメソッドは、文字列をパラメータとして持つ必要があります。

この方法では現在何も返されていないので、選択したスペースが分からないことに注意してください。

+0

ありがとうジム私はちょうど2つの質問があります1)それは再帰関数に入るたびに新しい単語を入力するよう促し、2)私はelse {return row && column; – user1323808

+0

@ user1323808いいえ、最初の再帰関数呼び出しに渡されたのと同じ単語を使用します。 2つのアイテムを返すには、それらを含むオブジェクトを作成する必要がありますが、あなたはちょうどelseでこれらを返すことができます(ifの最初の部分でreturn firstSpace(word)を使用することもできます)。 – Jim

関連する問題