2016-03-17 1 views
0
public class someClass{ 
public String[][] board = new String[7][7]; 

public someClass(){ 
    for (int i = 0; i < board.length; i++) { 
     for (int j = 0; j < board[i].length; j++) { 
      board[i][j] = " "; 
     } 
    } 
} 

У меня это в классе, который я использую, я изо всех сил пытаюсь найти способ поиска по массиву и посмотреть, осталось ли ячейки справа от или ниже конкретная ячейка пуста или заполнена.Как выполнить поиск в массиве 2D String - Java

IE board[4][2] - как бы я просмотрел массив, чтобы увидеть, являются ли позиции [4] [1], [4] [3], [3] [2] и [5] [2] пустыми или имеют элемент внутри них?

EDIT: Я пытаюсь использовать вложенные циклы для просмотра массива и вычитания 1 из индексов в цикле, однако ничего не дает.

+2

Вы пытались это сделать? – nnunes10

+2

Добавьте или вычтите один из первого или второго индекса. –

+2

простая математика. –

ответ

1
Above: [i][j - 1] 
Below: [i][j + 1] 
Before: [i - 1][j] 
After: [i + 1][j] 

Просто убедитесь, что сначала вышли за пределы. Затем:

private boolean isInBounds(int i, int j) { 
    return (board.length > 0 && i >= 0 && i < board.length && j >= 0 && j < board[i].length); 
} 

private boolean isAboveEmpty(int i, int j) { // This might be a little verbose... 
    int newJ = j - 1; 
    if(isInBounds(i, newJ)) 
     return board[i][newJ].equals(" "); //Above cell is empty 
    return true; // out of bounds cells are always empty (or are they?) 
} 

Затем повторите для других направлений. Сделайте также board и позвольте пользователю использовать метод set для установки ячеек, чтобы вы могли сначала выполнить свою проверку.

public class Board { 
    private String[][] board = new String[7][7]; 
    ... 
    public void set(int i, int j, String value) { 
     if(isInBounds(i, j) && isAboveEmpty(i, j) && isBelowEmpty(i, j) && isBeforeEmpty(i, j) && isAfterEmpty(i, j)) { 
      board[i,j] = value; 
     } 
    } 
} 
+0

Это имеет смысл, спасибо за ваш вклад. Теперь я понимаю, как это сделать и как это работает :) – Topher

+0

Как бы я мог сделать противоположное этому. Итак, если у меня есть одна ячейка и которая окружена с четырех сторон другими элементами, тогда она отображает сообщение? – Topher

+0

После того, как вы выполните '' 'board [i, j] = value;' '' вызов метода '' 'checkNeighbours (int i, int j)' '', который проверяет каждую из соседних ячеек, если они теперь окружены. ('' 'isSurrounded (int i, int j)' '' может быть другим методом). –

1
public class someClass{ 

    public String[][] board = new String[7][7]; 

    public List<Coordinates> findAdjacentCells(final String[][] board, final int x, final int y){ 
     List<Coordinates> result = new ArrayList<Coordinates>(); 

     if(x >= 1 && y >= 1) { 
      if(y + 1 < board[x].length) 
       result.put(new Coordinates(x, y + 1)); 
      if(y - 1 >= 0) 
       result.put(new Coordinates(x, y -1)); 
      if(x + 1 < board.length) 
       result.put(new Coordinates(x+1, y)); 
      if(x -1 >= 0) 
       result.put(new Coordinates(x-1, y)); 
     } 

     return result; 
    } 
     // Keep track of coordinates 
     public class Coordinates { 
      int positionX; 

      int positionY; 

      public Coordinates(int positionX, int positionY) { 
       super(); 
       this.positionX = positionX; 
       this.positionY = positionY; 
     } 

     public final int getPositionX() { 
      return positionX; 
     } 

     public final int getPositionY() { 
      return positionY; 
     } 
    } 
} 

Вы можете сделать что-то подобное выше. Я не знал, имеет ли ваша доска положение 0. Очевидно, массив работает. Поэтому вам, возможно, придется изменить некоторые условные условия.

Редактировать: Вы редактировали свой вопрос и добавили код, это может быть не актуально.

+0

спасибо за ввод. Я вижу, что вы делаете там по большей части, список ifs дает «метод put (String) не определен для типа List Topher

+0

Я исправил его, я имел в виду создавайте объекты вместо добавления массива. Альтернативно вместо использования класса «Координаты» вы можете сделать «Список» «списком », а затем сделать «result.put» (плата [x] [y + 1 ]) '. Это зависит от того, нужны ли позиции или что находится внутри позиции. В вашем правлении говорится, что вы проводите сравнение, поэтому, возможно, вам нужны только значения, а не координаты. – wiredniko

+0

Но если x или y = 0, вы получаете пустой список, поэтому вы не можете получить соседние ячейки ячеек первой строки/столбца. –