我想知道如何随机生成一个数字,然后让它将该数字打印为一个字符。这就是我到目前为止所拥有的。
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
答案 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]