1

2D 配列と、3 つのパラメーター (int x、int y、int コスト) を取るオブジェクトの挿入に問題があります。これは検索アルゴリズムの始まりであり、確かに非常に悪いスタートを切っています。以下にコードを貼り付けます。このコードを実行しようとすると、コンパイル エラーが発生します。これは単純だと確信していますが、解決できません。Map2 クラスは、ソートなどの主要なアルゴリズムを実装するために使用する予定です。

 import java.util.Arrays;


    public class Map2 {

        public static void main (String args[]){

         Points[][] grid = new Points[4][4];

         for(int i = 0; i < grid.length; i++){
             for(int j = 0; j < grid.length; j++){
                 grid[i][j] = new Points(i,j,1);
             }


         }
         System.out.print(Arrays.deepToString(grid));

    }
    }

このクラスは私のオブジェクトであり、ある位置から次の位置へ移動するための移動コストが含まれています (次のステップは明らかに隣人を決定することです)。はい、これは機能する A スター アルゴリズムを作成する試みの一部です。

 public class Points {
     int x;
     int y;
     int movement_cost;

    public  Points(int iX, int iY, int cost){
        x = iX;
       y = iY;
        movement_cost = cost;

    }

    public int getX(){
        return x;
    }
    public int getY(){
        return y;
    }
    public int getMovementCost(){
        return movement_cost;
    }
    public void setX(int x){
        this.x = x;
    }
    public void setY(int y){
        this.y = y;
    }
    public void setMovementCost(int cost){
        this.movement_cost = cost;
    }
    public String toString(){
        return ""+getX()+ ""+getY()+""+getMovementCost();
    }
}

これは、コンパイル後に読み取られたコンソールです (メモリ内の 3 つのアドレス空間)

    run:[[001, 011, 021, 031], [101, 111, 121, 131], 
[201, 211, 221, 231], [301, 311, 321, 331]]
BUILD SUCCESSFUL (total time: 2 seconds)

ここでの私の希望は単純です。配列内の各オブジェクトには、メモリ内の座標の参照が含まれ、移動のコストが含まれます。これは、後で比較して次の最適な位置を決定するために使用されます (後で次のようなものを実装します)。ゴール、スタート)

私の質問は次のとおりです。コードの何が問題なのですか?

私はあなたの応答が常に高く評価されるように応答する人は誰でも前もって感謝したい.

私の質問 V0.1 の現在の改訂版: 迅速な対応に感謝します。今日、新しいことを学びました ^^ that Arrays.deepToString(grid)); は私が知らなかったすばらしいツールですが、まだランタイム エラーが発生しています。あなたの返信にもう一度感謝し、それ以上の返信にもう一度感謝します:)。上記のコードは推奨どおりに修正されましたが、ランタイム エラーはまだ存在します。

4

1 に答える 1

1

あなたのコードにはいくつかの間違いがあります:

  • ネストされたループは、配列が正方形であることを前提としています (両方の次元を に反復しますgrid.length)。
  • 各行を初期化した後、配列全体を出力します。
  • 配列を正しく印刷しません (Java 配列は、 に渡されたときにその内容を印刷しませんSystem.out.println) 。

マトリックスが実際に常に正方形である場合、最初の項目は問題ありません。2 番目の項目は、出力を 2 番目のネストされたループの外に移動することで簡単に修正できます。

3番目の項目が最も難しいです。2D 配列を受け取る静的メソッドを作成し、2 つの入れ子になったループを使用して要素ごとに出力するのは良い練習になります。System.out.println(Arrays.deepToString(grid));システム関数を使用したい場合にも使用できます。

于 2012-06-30T00:43:12.723 に答える