1

わかりました。これらすべてについて本当に助けが必要です。Board.javaという名前のクラスがあります。ボードはcharの2次元配列として表されます。カメは、通過するボード上の各位置にキャラクターを書き込むことで、トレイルを残すことができます。ボードには2つのコンストラクターがあります。デフォルトのコンストラクターは引数をとらず、10行25列のボードを作成します。ボード内の各要素を空白に設定します。2番目のコンストラクターは、行数と列数をそれぞれ指定する2つの整数を取ります。指定した行または列の数が1未満の場合は、値を1に設定します。指定した行または列の数が80より大きい場合は、値を80に設定します。ボードの各要素を空白に設定します。クラスにはclearBoardメソッドが必要です。これにより、すべての位置に空白が配置されます。カメが占める位置を除いて。カメは、「0」、「1」、「2」、...「9」の文字を使用して位置をマークします。

以下を完了しましたが、コンストラクターが正しいかどうかわかりません。また、clearBoardメソッドを開始する方法もわかりません。助けてください!!

import java.util.Arrays;

public class Board {

    private char [][] theBoard;

     public Board() { // This will not take any arguments 


        theBoard = new char [10][25]; //10 rows and 25 columns
        for (int row = 0; row < theBoard.length; row++ ) {
             for (int col = 0; col < theBoard[row].length; col++ )
                 theBoard [row][col] = ' ';
    System.out.println();
        }
   }

   public Board (int [][] theBoardArray) { 
        char [][] theBoard = new char [theBoardArray.length] [theBoardArray[0].length];
        for (int row = 0; row < theBoard.length; row++ ) {
                if (row <1)
                    row = 1;
                else if (row >80)
                    row =80;
             for (int col = 0; col < theBoard[row].length; col++ ){
                if (col <1)
                    col = 1;
                else if (col >80)
                    col =80;
                 theBoard [row][col] = ' ';
            }
    System.out.println();
        }
    }
4

2 に答える 2

1

いくつかの部分を修正し、少しクリーンアップして、必要な残りを追加しました。説明はコード コメントにあります。

public class Board {

    private char [][] theBoard;

    public Board() { // This will not take any arguments
        this(10, 25); // calls the other constructor
        // avoid duplicate code, where possible
    }

    // takes number of rows and collumns
    public Board (int rows, int cols) {
        // fix illegal row and column numbers
        rows = fixNumber(rows);
        cols = fixNumber(cols);
        // create the board and fill it with ' '
        theBoard = new char [rows][cols];
        for (int row = 0; row < theBoard.length; row++) {
            for (int col = 0; col < theBoard[row].length; col++)
                theBoard[row][col] = ' ';
        }
    }

    private int fixNumber(int number) {
        if (number < 1) {
            return 1;
        } else if (number > 80) {
            return 80;
        } else {
            return number;
        }
    }

    // almost like constructor, just does not create a new char[][] and
    // only puts ' ' into fields not containing any of '0' - '9'
    public void clearBoard() {
        for (int row = 0; row < theBoard.length; row++ ) {
            for (int col = 0; col < theBoard[row].length; col++) {
                if (theBoard[row][col] < '0' || theBoard[row][col] > '9') {
                    theBoard[row][col] = ' ';   
                }
            }
        }
    }
}
于 2012-12-05T23:24:17.337 に答える
-1

まず、int を ' ' に設定しないでください。' ' は文字、int は数値です。このコードにより、int がスペースの ASCII インデックスである int 32 に設定されます。スペースが 32 であることを説明したい場合、これはうまくいくと思いますが、奇妙です。

2 番目のコンストラクターは正しくありません。あなたはint配列を持ち込んでいますが、2つのintを取ると言っていました。行と列を値の内側に設定する「if else」部分は適切ですが、それらに到達する方法ではありません。

行と列の 2 つの int を渡してから、それらが許容範囲内にあることを確認し、そうでない場合は変更してから、int 配列を作成してみてください。

于 2012-12-05T23:24:14.230 に答える