Java获取10个布尔值并将其随机化

时间:2018-11-16 01:52:08

标签: java boolean

这是我的第一篇文章,对不起,如果我做错了什么!

我正在尝试制作一个程序,在其中输入宽度和高度。从这2个值中,取10个值并将10个值随机设置为true或false。请注意,这是我遇到麻烦的学校作业。

我该怎么做?

这是给我的问题:

  

任务1:

     
      
  1. 创建新类“ BinaryMap”
  2.   
  3. 创建新方法“ generateRandomArrayFix”,该方法将创建大小为10x10的2D布尔数组
  4.   
  5. 使用false初始化所有值
  6.   
  7. 100个值中的10个应随机更改为true
  8.   
  9. 返回布尔数组。
  10.   
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 :(得分:0)

欢迎来到SO。不幸的是,您发布的代码存在很多问题(包括语法错误),因此我们很难提出具体更改来解决您的问题。

我不建议您提供要求的解决方案,而是建议您先将任务分解为几个步骤,然后将每个步骤转变为要验证的方法(通过单元测试),然后再进行下一个步骤。

因此,例如,第一个任务是:创建一个初始化为false的10x10数组。为此编写测试可能是唯一棘手的部分。像这样:

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