2014-11-14 3 views
0

У меня есть двумерный массив в Java. Значения, как:Поиск и отметка в двумерном Java-массиве

2 1 0 2 1 
1 0 2 2 2 
1 1 1 2 2 
0 0 0 2 2 

Я хочу изменить теперь все «2» S к 1, но только те, кто окаймляющие другие. Таким образом, после слова «Change (4 | 4) на„2“, я хочу, чтобы мой массив как это:

2 1 0 1 1 
1 0 1 1 1 
1 1 1 1 1 
0 0 0 1 1 

Какой самый быстрый способ сделать это

+0

Что вы подразумеваете под «примыканием к другим»? –

+0

Как вы можете видеть на моем примере. 2 at (0 | 0) не должны меняться. Только те, кто рядом с другими 2-мя. –

+0

Итак, если 2 акции «стороны» с другим 2, вы меняете его –

ответ

0

Предполагая, что ваш рабочий с двумя? одномерный массив:

have int x and y set to 0 
start from [x][y] on the array 
Step 1: Check to if number equals "2" 
    If it does and: 
    0<x<4 and 0<y<4: Check [x-1][y-1],[x][y-1],[x][y+1],[x-1][y],[x+1][y], and [x+1][y+1] 
    x=0 and 0<y<3: Check [x][y-1],[x][y+1],[x+1][y], and [x+1][y+1] 
    x=4 and 0<y<3: Check [x-1][y-1],[x][y-1],[x][y+1],[x-1][y] 
    0<x<4 and y=0: Check [x][y+1],[x-1][y],[x+1][y], and [x+1][y+1] 
    0<x<4 and y=3: Check [x-1][y-1],[x][y-1],[x-1][y],[x+1][y] 
    and so on.... 
check to see if [x][y] = any of the checks 
    if so: store a 1 in [x][y] in an alternative array of the same size (lets call it flags) 
iterate and repeat from step 1 until you have gone through the entire array 
run through the flags and if the value is 1 at any address [x][y] change the corresponding value in our original array to "1". 

жаль его немного многословным и, возможно, сбивает с толку, пожалуйста, дайте мне знать, если мне нужно уточнить

0

Где ваш код, что вы пробовали до сих пор

?

Вы можете попробовать использовать вложенный цикл, а затем положить if-либо еще заявления во внутреннем цикле, что
1. Будет ли смотреть на значения слева и справа от индекса
2. Если рядом с 2 (и является 2), заменит/присвоит 2 в индексе w/a 1, иначе он просто оставит его в покое.

Вы хотите сделать это масштабируемым, чтобы он работал с любым массивом из 0s, 1s и 2s или только с этим точным массивом, который вы предоставили?

Пожалуйста, дайте мне знать, если вам нужны какие-либо разъяснения, и укажите ваш код, чтобы мы могли что-то сработать.

0

В этом примере используется массив 2D как массив массивов.

  1. Он генерирует 2D массив случайных чисел:

    • массив [] [] является исходный массив и все замена процедура будет выполняться в замененного [] [] массив (который является копией источник один).
    • SIZE_I - количество строк и SIZE_J - количество столбцов;
    • RANGE_FROM - минимальное количество в массиве и RANGE_TO - максимальное число;
    • ПОИСК - номер для поиска;
    • REPLACE - номер для замены.
    • количество - количество или найдено и заменены.
  2. Он печатает исходный массив на экране;

  3. Он проверяет исходный массив для соответствия константе SEARCH с массивом элементов массива [i] [j]. В зависимости от местоположения элемента необходимо выполнить несколько условий, чтобы заменить этот элемент в замененном массиве [] [] и увеличить количественную величину на единицу.

  4. Он печатает замененный массив на экран и количество замененных элементов.

Я считаю, что вы можете получить производительность, используя 2D-массив как один массив. Например, ваш 2D-массив может быть представлен как {2,1,0,2,1,1,0,2,2,2,1,1,1,2,2,0,0,0,2,2 }, но вы должны обращаться с ним должным образом.

public static void main(String[] args) { 
final int RANGE_FROM = 0; 
final int RANGE_TO = 2; 
final int SEARCH = 2; 
final int REPLACE_TO = 1; 
final int SIZE_I = 4; 
final int SIZE_J = 5; 
int quantity = 0; 
int array[][] = new int[SIZE_I][SIZE_J]; 
int replaced[][] = new int[SIZE_I][SIZE_J]; 

// Generate arrays 
for (int i = 0; i < SIZE_I; i++) { 
    for (int j = 0; j < SIZE_J; j++) { 
    array[i][j] = (int) (RANGE_FROM + Math.random() * (RANGE_TO - RANGE_FROM + 1)); 
    replaced[i][j] = array[i][j]; 
    } 
} 

// Display array 
System.out.println("Source array:"); 
for (int x[]: array) { 
    for (int y: x) { 
    System.out.print(y + " "); 
    } 
    System.out.println(); 
} 
System.out.println(); 

// Check array 
for (int i = 0; i < array.length; i++) { 
    for (int j = 0; j < array[i].length; j++) { 
    if (i == 0 && j == 0) { 
     if (array[i][j] == SEARCH && (array[i+1][j] == SEARCH || array[i][j+1] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else if (i == 0 && j == array[i].length - 1) { 
     if (array[i][j] == SEARCH && (array[i+1][j] == SEARCH || array[i][j-1] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else if (i == array.length -1 && j == 0) { 
     if (array[i][j] == SEARCH && (array[i-1][j] == SEARCH || array[i][j+1] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else if (i == array.length -1 && j == array[i].length - 1) { 
     if (array[i][j] == SEARCH && (array[i][j-1] == SEARCH || array[i-1][j] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else if (i == 0 && j != 0 && j != array[i].length - 1) { 
     if (array[i][j] == SEARCH && (array[i][j-1] == SEARCH || array[i+1][j] == SEARCH || array[i][j+1] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else if (i != 0 && i != array.length - 1 && j == array[i].length - 1) { 
     if (array[i][j] == SEARCH && (array[i][j-1] == SEARCH || array[i-1][j] == SEARCH || array[i+1][j] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else if (i == array.length - 1 && j != 0 && j != array[i].length - 1) { 
     if (array[i][j] == SEARCH && (array[i][j-1] == SEARCH || array[i-1][j] == SEARCH || array[i][j+1] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else if (i != 0 && i != array.length - 1 && j == 0) { 
     if (array[i][j] == SEARCH && (array[i-1][j] == SEARCH || array[i][j+1] == SEARCH || array[i+1][j] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    else { 
     if (array[i][j] == SEARCH && (array[i-1][j] == SEARCH || array[i][j+1] == SEARCH || array[i+1][j] == SEARCH || array[i][j-1] == SEARCH)) { 
     quantity++; 
     replaced[i][j] = REPLACE_TO; 
     } 
    } 
    }  
} 

// Display replaced array 
System.out.println("Replaced array:"); 
for (int x[]: replaced) { 
    for (int y: x) { 
    System.out.print(y + " "); 
    } 
    System.out.println(); 
} 
System.out.println(); 
System.out.println("Replace quantity: " + quantity); 
System.out.println(); 
} 
+0

Не могли бы вы немного рассказать о своем ответе, чтобы было ясно, что делает ваш код? – avalancha

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