Создаю игру Bingo:
private final int BOARD_SIZE = 5;
private int[][] field = new int[BOARD_SIZE][BOARD_SIZE];
Нужно заполнить первую колонку числами в диапазоне 1-15, вторую 16-30, третью 31-45, четвертую 46-60, пятую 61-75.
public void initArray() {//метод Math.random
field[0][0] = StartNums.makeNums(1, 15);
field[0][1] = StartNums.makeNums(1, 15);
field[0][2] = StartNums.makeNums(1, 15);
field[0][3] = StartNums.makeNums(1, 15);
field[0][4] = StartNums.makeNums(1, 15);
}
и т.д.
Был ещё вариант сделать 5 одномерных массивов, но подозреваю, что это плохой подход.
Как красиво заполнить каждый из пяти подмассивов? В дальнейшем ещё придется в каждом расставить по возрастанию и исключить повторы, но с этим, думаю, справлюсь.
Можно создавать массив со значениями от минимального до максимального, после чего его перемешивать и брать первые BOARD_SIZE
значений. Затем эти значения сортировать и записывать в столбцы:
public class Bingo
{
private static final int
BOARD_SIZE = 5,
OPTIONS_COUNT = 15;
private static final Random rand = new Random();
private int[][] field = new int[BOARD_SIZE][BOARD_SIZE];
public void init()
{
for (int i = 0; i < BOARD_SIZE; i++)
{
int[] numbers = createAndShuffleArray(OPTIONS_COUNT * i + 1, OPTIONS_COUNT * (i + 1));
int[] requiredNumbers = new int[BOARD_SIZE];
System.arraycopy(numbers, 0, requiredNumbers, 0, BOARD_SIZE);
Arrays.sort(requiredNumbers);
for (int j = 0; j < BOARD_SIZE; j++)
{
field[j][i] = requiredNumbers[j];
}
}
for (int i = 0; i < BOARD_SIZE; i++)
{
System.out.println(Arrays.toString(field[i]));
}
}
private int[] createAndShuffleArray(int min, int max)
{
int[] array = new int[max - min + 1];
for (int i = 0; i < array.length; i++)
{
int j = rand.nextInt(i + 1);
array[i] = array[j];
array[j] = min + i;
}
return array;
}
}
И запуск этого кода:
public static void main(String[] args)
{
Bingo bingo = new Bingo();
bingo.init();
}
Числа получаются в рамках диапазона, без повторений и по возрастанию.
Если числа нужно записывать в строку, то цикл будет ощутимо короче:
for (int i = 0; i < BOARD_SIZE; i++)
{
int[] numbers = createAndShuffleArray(OPTIONS_COUNT * i + 1, OPTIONS_COUNT * (i + 1));
System.arraycopy(numbers, 0, field[i], 0, BOARD_SIZE);
Arrays.sort(field[i]);
}
Предлагаю самый очевидный вариант:
for (int i=0; i<BOARD_SIZE; i++) {
field[0][i] = StartNums.makeNums(1, 15);
}
for (int i=0; i<BOARD_SIZE; i++) {
field[1][i] = StartNums.makeNums(16, 30);
}
// и так далее
Либо такой:
for (int i=0; i<BOARD_SIZE; i++) {
for (int j=0; j<BOARD_SIZE; j++) {
switch (i) {
case 0:
field[i][j] = StartNums.makeNums(1, 15);
break;
case 1:
field[i][j] = StartNums.makeNums(16, 30);
break;
// и так далее
}
}
}
Я бы выбрал первый способ, так как он хорошо читается.
PS. Только Вы определитесь, что Вы заполняете значениями из одного интервала: колонки или строки, а то Вы пишите, что колонки, однако заполняете строки.
Можно вот так:
int magicNumber = 15;
for (int i = 0; i < field.length; i++)
for (int j = 0; j < field[i].length; j++)
field[i][j] = startNums.makeNums(i * magicNumber + 1, (i + 1) * magicNumber);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Принял решение, определиться с направлениемВыбор пал на мобильную разработку
Создаём копию другого прямоугольника (он и передаётся в параметрах):
В Desktop Swing приложении есть класс Item в пакете Data, класс ItemFrame (графическое заполнение и редактирование класса Item) в пакете GUI и класс NetWorker в пакете...