通过2D阵列中随机生成的数字打印字符数

时间:2018-04-10 01:36:37

标签: java arrays multidimensional-array

我想知道如何随机生成一个数字,然后让它将该数字打印为一个字符。这就是我到目前为止所拥有的。

import java.util.Scanner;
public class Main
{
    public static void main (String[] args){
    Scanner scan = new Scanner(System.in);

    int[][] ground = new int[12][12];
    int mineNum;

    System.out.print ("Please Enter an Integer");

    int num = scan.nextInt();

    if(num > -1 && num <145){
        for (int i=0; i<ground.length; i++){
            for (int j = 0; j < ground[i].length;j++){
                ground[i][j] = mineNum;
            }
        }
    }
}

我认为你必须将随机int存储在变量中。但是从那里我希望得到用户输入的随机int并将其转换为X',并将这些x随机输入到数组中,因此我必须将该数字转换为char数,然后将其随机插入与另一个阵列?这个想法看起来像是,例如,说mineNum是5,它看起来像是一个3x9网格打印出来的。

0 0 0 0 X 0 X 0 0

0 0 X 0 0 0 0 0 0

0 0 0 0 X X 0 0 0

1 个答案:

答案 0 :(得分:2)

一种选择是在2D网格的维度内生成5个不同的随机数,代表Xs。然后用Os填充其他所有内容。我生成0到dim^2 - 1之间的随机数。然后我将它们添加到一组中,直到达到所需的随机位置数。最后,我将这些数字转换为x / y尺寸,以将X放置在电路板上。

Scanner scan = new Scanner(System.in);

int dim = 5;
char[][] ground = new char[dim][dim];
Set<Integer> xSet = new HashSet<>();

System.out.print ("Please Enter an Integer");
int mineNum = scan.nextInt();

Random rand = new Random();
while (xSet.size() < mineNum) {
    int randomNum = rand.nextInt(dim*dim);
    xSet.add(randomNum);
}

// default everything to being Os
for (int r=0; r < dim; ++r) {
    for (int c=0; c < dim; ++c) {
        ground[r][c] = 'O';
    }
}

// then overwrite with Xs
for (int num : xSet) {
    int x = num % dim;
    int y = num / dim;
    ground[x][y] = 'X';
}

System.out.println(Arrays.deepToString(ground).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));

[O, O, O, O, O]
[O, O, O, X, X]
[O, O, X, O, O]
[O, O, X, O, O]
[O, O, O, X, O]

Demo