Java Получение 10 логических значений и их рандомизация - PullRequest
0 голосов
/ 16 ноября 2018

Это мой первый пост, извините, если я что-то не так делаю!

Я пытаюсь создать программу, в которой вы вводите ширину и высоту.Из этих 2 значений он берет 10 из них и случайным образом устанавливает эти 10 значений в true или false.Просто примечание: это школьное задание, с которым у меня были проблемы.

Как мне поступить?

Вот вопрос, который мне дали:

Задача 1:

  1. Создать новый класс "BinaryMap"
  2. Создать новый метод "generateRandomArrayFix", который создает двумерный логический массив размером 10x10
  3. Инициализируйте все значения со значением false
  4. 10 из 100 значений должны быть случайным образом изменены на true
  5. возвращает ваш логический массив.
import java.util.Random;
import Prog1Tools.IOTools;

public class BinaryMap {
    public static void main(String[] args) {
    boolean[][] array = generateRandomArray();
    //  for (int i = 0; i < array.length; i++) {
    //     printArray(array[i]);
    // }
    }

    private static void printArray(boolean[] booleans) {
    }

    /**
     * Ändert einen Wert im gegebenen daten-Array;
     * aus wahr wird falsch und aus falsch wird wahr
     *
     * @param daten - Array welches verändert werden soll
     * @param x     - x-Koordinate des Wertes
     * @param y     - y-Koordinate des Wertes
     */
    static void updateArray(boolean[][] daten, int x, int y) {
    }

    private static boolean[][] generateRandomArrayFix() {
        // Random rand = new Random();
        /*
         * 10 random aus 100
         */
        boolean[][] randomArray;
        int x = 10, y = 10;
        randomArray = new boolean[x][y];
        for (x = 0; x < randomArray.length; x++) {
            for (y = 0; y < randomArray.length; y++) {
                randomArray[x][y] = false;
            }
        }
        return randomArray;
    }

    private static boolean[][] generateRandomArray() {
        Random rand = new Random();
        int rowWidth = IOTools.readInt("Enter Grid Width: ");
        int colHeight = IOTools.readInt("Enter Grid Height: ");
        boolean[][] board = new boolean[rowWidth][colHeight];
        for (int idx = 1; idx <= 10; ++idx) {
            //fill the grid
            for (int row = 0; row < board.length; row++) {
                for (int col = 0; col < board[row].length; col++) {
                    board[row][col] = rand.nextBoolean();
                }
            }
            //display output
            for (int i = 0; i < board.length; i++) {
                for (int j = 0; j < board[i].length; j++) {
                    System.out.print(board[i][j] + " ");
                    //System.out.println();
                }
                System.out.println();
            }
            return board;
        }
        return board;
    }
}

1 Ответ

0 голосов
/ 16 ноября 2018

Добро пожаловать на SO. К сожалению, код, который вы опубликовали, имеет довольно много проблем (включая синтаксические ошибки), поэтому нам довольно сложно предложить конкретные изменения для решения вашей проблемы.

Вместо того, чтобы предлагать решение требований, я предлагаю вам разбить задачу на несколько этапов и превратить каждый в метод, который вы проверяете (с помощью модульных тестов), прежде чем переходить к следующему.

Так, например, первая задача: создать массив 10x10, инициализированный как false. Написание теста для этого может быть единственной сложной задачей. Что-то вроде:

class BinaryMap {
    public int countValues(boolean value) {
        ...
    }
}

class BinaryMapTest {
    @Test
    void testInitialisation() {
        BinaryMap map = new BinaryMap():
        assertThat(map.countValues(false)).isEqualTo(100);
        assertThat(map.countValues(true)).isEqualTo(0);
    }
}

Я предлагаю вам заставить этот код работать, прежде чем переходить к случайному присвоению true значений.

В этом случае, действительно, единственная сложная вещь, которую следует избегать, это просто сгенерировать 10 случайных позиций и присвоить их true. Если вам случится генерировать дубликаты, у вас будет меньше 10 true значений в массиве.

Так что вместо:

for 10 iterations
    assign random value to true

Вам нужно

while there are less than 10 true values
    assign random value to true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...