2016-07-08 8 views
-3

Я хочу выполнить поиск по массиву объектов 2d и разделить объекты на основе поля класса объектов, теста 1 и теста 2 соответственно. Затем я хочу записать индексы объекта 2d массива в два массива 1d как x, y. Я хотел бы иметь две пары из двух массивов 1d для каждого объекта, так что я могу рассчитать расстояние между тестом 1 и тестом 2.Сохранение массива 2d объектов для 1d массивов

Моя проблема/вопрос Когда я запускаю цикл на одном из массивов 1d, чтобы распечатать их значения, чтобы проверить их, они заполнены связкой нулей, и их не должно быть. Я включил комментарии в код, чтобы помочь уточнить.

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 на 8 Символьный objectArray [] [] = новый Символ [8] [8]; –

+0

В чем вопрос? –

ответ

0

Ok. 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 массивов. попробуйте использовать другое имя индекса для этих массивов. потому что я думаю, что у них 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

Если бы это была проблема, он бы не получал кучу 0s, замусоренных в его массивах. – Jesse

+0

Мой плохой, @ Mast.mangesh. ты прав. Сначала я не понял, что вы говорите. – Jesse

+0

Спасибо, я понимаю, что вы говорите. –

Смежные вопросы