2016-07-08 8 views
-3

2次元オブジェクト配列を検索し、それぞれオブジェクトクラスフィールドtest1とtest2に基づいてオブジェクトを区切りたいとします。次に、2次元配列のオブジェクトのインデックスを2つの1次元配列にx、yとして書きたいとします。私は、オブジェクトごとに2つの1d配列を2組持っているので、テスト1オブジェクトとテスト2オブジェクトの距離を計算することができます。2次元オブジェクト配列を1次元配列に保存する

私の問題/質問 1d配列の1つにループを実行して値を表示してチェックすると、それらは0の束で満たされています。私は明確にするためにコードにコメントを入れました。

public class gameboard2 { 



public static void main(String[] args) { 

Character2 objectArray[][] = new Character2[8][8]; 

int test1X1[] = new int[100]; 
int test1Y1[] = new int[100]; 
int test2X2[] = new int[100]; 
int test2Y2[] = new int[100]; 
int junkX1Array[] = new int[100]; 
int junkY1Array[] = new int[100]; 



for (int row = 0; row < objectArray.length; row++){ 
for(int col = 0; col < objectArray.length; col++){ 
    if (row <= 1 && col <= 7){ 
    objectArray[row][col] = new Character2(); 
      objectArray[row][col].setType("Test1"); 
      objectArray[row][col].setIdTest1(row,col); 
      objectArray[row][col].objectFlag = true; 

    } 
    else if ((row == 6 || row == 7) && (col <= 7)){ 
    objectArray[row][col]= new Character2(); 
      objectArray[row][col].setType("Test2"); 
    objectArray[row][col].setIdTest2(row,col); 
      objectArray[row][col].objectFlag = true; 


    } 
    else { 
    objectArray[row][col]= new Character2(); 
     objectArray[row][col].setType("Test3"); 

    } 
    } 
} 

for (int x = 0; x < objectArray.length; x++){ 
     for (int y = 0; y < objectArray.length; y++){ 


    if (objectArray[x][y].getType().compareTo("Test1") == 0){ 
      test1X1[x] = x; 
      test1Y1[y] = y; 


    } 

if (objectArray[x][y].getType().compareTo("Test2") == 0){ 
     test2X2[x] = x; 
     test2Y2[y] = y; 

     System.out.println(test2X2[x]); 
     //Arrays are filled with 2d array object indices and printed as they are filled. These values appear correct. However when you print from the array (see below) its filled with a bunch of zeros. 
    } 

    else 
     junkX1Array[x] = x; 
     junkY1Array[y] = y; 
    } 
    } 
    System.out.print("Now the newly created array will be printed"); 
    // Array is printed. Values differ. 
      for (int b = 0; b < test2X2.length; b++) 
    { 
     System.out.println(test2X2[b]); 

    } 

    } 
} 

// これはオブジェクトクラスです。

public class Character2 { 



private String id; 
private String type; 
boolean objectFlag = false; 



public void setType(String AssignType) { 
type = AssignType; 
} 
public String getType(){ 
return type; 
} 
public String getId(){ 
return id; 
} 


public void setIdTest1(int row, int col){ 
id = ("Test1" + " row: " + row + " col: " + col); 

} 
public void setIdTest2(int row, int col){ 
id = ("Test2" + " row: " + row + " col: " + col); 

} 
} 
+0

objectArrayの行数と列数は同じですか? – StaticBeagle

+0

はい8 by 8文字objectArray [] [] =新しい文字[8] [8]; –

+0

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

答えて

0

Mast.mangeshは正しい、彼はちょうど完全な文脈を持っていなかった。 xとyを使ってテスト配列にインデックスを作成していますが、xとyごとにテスト配列に値を追加するわけではありません。彼らは自分自身のインデックスを持っている必要があります。これは、テスト配列自体に何かを追加したときにのみインクリメントされ、次の提案につながります。なぜあなたはここで配列を使用していますか? ArrayListのような、より堅牢なものを使用しないのはなぜですか?あなたはすべてのことを避けていたでしょう...

public static void test(){ 
    Character2 objectArray[][] = new Character2[8][8]; 
    ArrayList<Integer> x1 = new ArrayList<>(); 
    ArrayList<Integer> y1 = new ArrayList<>(); 
    ArrayList<Integer> x2 = new ArrayList<>(); 
    ArrayList<Integer> y2 = new ArrayList<>(); 
    ArrayList<Integer> junkx = new ArrayList<>(); 
    ArrayList<Integer> junky = new ArrayList<>(); 

    for (int row = 0; row < objectArray.length; row++){ 
     for(int col = 0; col < objectArray.length; col++){ 
      if (row <= 1 && col <= 7){ 
       objectArray[row][col] = new Character2(); 
       objectArray[row][col].setType("Test1"); 
       objectArray[row][col].setIdTest1(row,col); 
       objectArray[row][col].objectFlag = true; 

      } 
      else if ((row == 6 || row == 7) && (col <= 7)){ 
       objectArray[row][col]= new Character2(); 
       objectArray[row][col].setType("Test2"); 
       objectArray[row][col].setIdTest2(row,col); 
       objectArray[row][col].objectFlag = true; 
      } 
      else { 
       objectArray[row][col]= new Character2(); 
       objectArray[row][col].setType("Test3"); 

      } 
     } 
    } 
    for(Character2[] c2: objectArray){ 
     for(Character2 c: c2){ 
      System.out.print(" " + c.getType()); 
     } 
     System.out.println(); 
    } 

    for (int x = 0; x < objectArray.length; x++){ 
     for (int y = 0; y < objectArray.length; y++){ 
      if (objectArray[x][y].getType().compareTo("Test1") == 0){ 
       x1.add(x); 
       y1.add(y); 
      } 

      if (objectArray[x][y].getType().compareTo("Test2") == 0){ 
       x2.add(x); 
       y2.add(y); 
      } 
      else{ 
       junkx.add(x); 
       junky.add(y); 
      } 
     } 
    } 

    System.out.print("Now the newly created array will be printed"); 
    for(int i : y2){ 
     System.out.println(i); 
    } 
} 
+0

ありがとう私はこれを試してみましょう。私は数週間だけプログラミングしています。私はArrayListについて知りませんでした。 –

+0

あなたのお手伝いをしてくれてありがとう、私は新しいことを学びました。 –

+0

喜んで助けました。コーディングを続けてください!あなたがわずか数週間であれば、codeacademy.comをチェックしてください。 – Jesse

1

は、私がここでの問題は、あなたがtest1x1、test1Y1、test2X2、test2Y2アレイの同じインデックス(x、y)を使用していることだと思います。それらの配列に異なるインデックス名を使用してみてください。私は彼らが4つの異なる配列だと思うからです。 例:

int i=0;j=0;k=0;l=0; 
for (int x = 0; x < objectArray.length; x++){ 
for (int y = 0; y < objectArray.length; y++){ 

if (objectArray[x][y].getType().compareTo("test1") == 0){ 
     test2X2[i] = x; 
     test2Y2[j] = y; 
     i++;j++; 
} 

if (objectArray[x][y].getType().compareTo("test2") == 0){ 
     test1X1[k] = x; 
     test1Y1[l] = y; 
     k++;l++; 
}}} 
+0

これが問題であれば、彼は自分のアレイ全体に散らばった0の束を得ることはできません。 – Jesse

+0

私の悪い、@ Mast.mangesh。あなたは正しいです。私は最初にあなたが言っていたことを理解していませんでした。 – Jesse

+0

ありがとう私はあなたが言っているものを参照してください。 –

関連する問題