Моя проблема немного сложна, чтобы описать словами, поэтому я начну с того, что у меня есть.Следующий код перемещает все 1 с одного [] raomly в t [] [] - каждый 1 перезаписывает найденное 0:
import java.util.Arrays;
import java.util.Random;
public class test {
public static void main (String[] args) {
Random r = new Random();
int a[] = {1,1,1,1,1,1,1,1,1,1};
int t[][] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //12 * 12, to avoid
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //out-of-bounds ex;
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //first and last
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //lines and rows
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //always stay 0.
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
int line = r.nextInt(10)+1; //1 - 11 to avoid out of bounds ex
int column = r.nextInt(10)+1;
t[line][column] = a[0]; //set first 1 in t[]
//move line and row away from the first one
//to avoid out-of-bounds ex in while loop below
//(I have to think about if this is really necessary,
//but let's not focus on this ;)
if (line <=5) {
line = (line+2);
}
else {
line =(line-2);
}
if (column <=5) {
column = (column+2);
} else {
column =(column-2);
}
//begin moving 1s
for(int i = 1; i < a.length; i++) { //i=1, because first 1 is
//already set
//the field has to be a new one, so it does not overwrite
//an existing 1.
while( (t[line][column]) !=0) {
line = r.nextInt(10)+1;
column = r.nextInt(10)+1;
}
t[line][column] = a[i];
}
for (int j = 0; j < t.length; j++) {
System.out.println(Arrays.toString(t[j]));
}
}
}
Но теперь я хочу быть рядом друг с другом, например, какэто:
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Моя цель - чтобы они выглядели как маленький лабиринт (для мини-игры-лабиринта-исследователя. Мне все равно, если результат покажется мне хорошим лабиринтом, но яхочу понять что происходит не так).Я попытался изменить цикл while следующим образом:
//while the int at the field is not zero
while( (t[line][column]) !=0 &&
//and all neighbours are 0,
((t[line+1][column]) == 0 && //above
(t[line-1][column]) == 0 && //below
(t[line][column-1]) == 0 && //left
(t[line][column+1]) == 0)) //right
{
//generate new random field.
line = r.nextInt(10)+1;
column = r.nextInt(10)+1;
}
Это не работает, и я не уверен, почему.Идея имеет смысл для меня, и я не знаю, где код не работает.Кроме того, я новичок, так что, хотя могут быть гораздо лучшие способы сделать что-то подобное, я был бы признателен за подробную информацию о причинах, по которым мой код работает неправильно: -)
Большое спасибо!