2016-03-27 2 views
1

Я хотел бы проверить, задан ли конкретный массив (со значениями int [] как значения) для определенного int [].java array как значение в карте

Я уже пробовал это.

private static final int[][] neighbours = { 
     {-1, 0}, {-1, +1}, 
     {0, -1}, {0, +1}, 
     {+1, -1}, {+1, 0}}; 

List<int[]> drawAt = new ArrayList<>(); 

    for (int[] tilePos : imageCoordMap.values()) { 
     for (int[] neighbour : neighbours) { 

      int[] wtf = {tilePos[0] + neighbour[0], tilePos[1] + neighbour[1]}; 

      if (imageCoordMap.containsValue(wtf)) { 
       drawAt.add(wtf); 
      } 
     } 

    } 

значение карты imageCoordMap содержит координаты х и у в виде массива.

Проблема с моим кодом по какой-то причине imageCoordMap.containsValue (wtf) всегда возвращает true, даже если это не так, и я не могу понять, почему. Я уже пробовал отладки, но без успеха

+0

Что такое ImageCoordMap? – Natecat

+0

это карта, которую я создал, с одной стороны, изображение, а с другой - координата этого изображения на сетке, которую я рисовал. Теперь я хотел бы проверить, содержит ли значение этой карты массив int []: int [] wtf = {tilePos [0] + сосед [0], tilePos [1] + сосед [1]} ;. Но почему-то это всегда возвращает true, даже если это не должно – Joey

+0

Как вы отлаживали? Можете ли вы выводить значения imageCoordMap, а затем приводить пример, где он возвращает true, но не должен? – lustoykov

ответ

1

Я думаю, что самый простой способ закодировать содержит метод самостоятельно:

static boolean contains(int[][] array, int[] value) { 
    for (int[] element : array) { 
     if (Arrays.equals(element, value)) 
      return true; 
    } 
    return false; 
} 

И не волнуйтесь, его не будет неэффективным. Java содержит и equals методы также петли. Вы просто не видите этого.

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