1

私はプログラミングに少し慣れていないので、再帰メソッドを実行するのに助けが必要です.2次元配列内のランダムなスペースを選択するメソッドがあり、スペースが空いているかどうかを確認したいです。スペースが空いている場合は、それを使用したいと思いますスペースですが、そうでない場合は、2D配列で新しいランダムスペースを選択します。ありがとうございます。

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();
            }
        }
4

2 に答える 2

2

コメントで言及した特定の問題は、firstSpaceメソッドがパラメーターとして文字列を持っている必要があるためです。次を使用する必要があります。

firstSpace(word);

また、このメソッドは現在何も返さないため、選択したスペースを知る方法がないことにも注意してください。

于 2012-04-18T10:58:00.193 に答える
0

インデックスの計算に1を追加する必要はないと思います。おそらく、配列の範囲外の例外が発生する可能性があります。ただし、それはgridDimensionsの定義によって異なります。

コメントで指定した問題は、Javaコンパイラが「voidfirstSpace()」という名前のメソッドを見つけようとしていたためです。これは「voidfirstSpace(Stringword)」とは別のメソッドです。

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;
    }
}
于 2012-04-18T11:07:41.010 に答える