[英]How to randomize two characters in multiple Lines?
我需要 1-4 个“X”的随机数,而其余 6-9 个字符都将是“O”。 整个输出需要在控制台中打印成 10 行。
到目前为止,我可以生成 6 个“O”和 1-4 个“X”中的随机数。 但是,我不知道如何使 X 随机分布在 O 中并且 O 将填充缺失的 X。
换句话说:如果代码只生成 2 个“X”,我需要有 8 个“O”才能生成 10 个字符。 现在我还必须将它打印成 10 行。 我碰巧对 java 很陌生,所以到目前为止我只有以下代码。
import java.util.Random;
class GFG {
public static void main(String[] args)
{
test();
}
public static void test() {
Random r = new Random();
int i = r.nextInt(4)+1;
for (int k=5; k<=5; k++) {
for (int m=0; m<=k; m++) {
System.out.println("O");
}
for (int j=0; j<=i; j++) {
System.out.println("X");
}
}
}
}
此方法会生成您想要的一行:
public static String randomLine() {
ArrayList<Character> characters= new ArrayList<>();
Random random=new Random();
int k=random.nextInt(4) + 1;
for (int i = 1; i <= k; i++) {
characters.add('X');
}
while(characters.size()<10) {
characters.add('O');
}
Collections.shuffle(characters); // Shuffling !!!
String str="";
for(int i=0;i<10;i++)
str=str+characters.get(i);
return str;
}
如果需要,您可以将返回类型更改为ArrayList<Character>
。
现在,要获得 10 行这样的行,您可以运行以下代码:
for(int i=0;i<10;i++)
System.out.println(randomLine());
在创建包含随机数 X 的数组/列表后,您可以使用现有的Arrays.shuffle
/ Collections.shuffle
来随机化数据的数组/集合:
public static List<String> getRandomXOs() {
Random random = new Random();
int countX = 1 + random.nextInt(4);
List<String> xos = IntStream.range(0, 10)
.mapToObj(i -> i < countX ? "X" : "O")
.collect(Collectors.toList());
Collections.shuffle(xos);
return xos;
}
// -------
// test
for (int i = 0; i < 5; i++) {
System.out.println(getRandomXOs());
}
输出(随机):
[O, O, O, O, X, X, X, O, O, X]
[X, O, O, O, O, X, X, O, X, O]
[O, O, O, O, O, X, O, O, O, X]
[X, O, O, O, O, O, O, O, O, O]
[O, X, X, O, O, O, O, X, O, O]
使用Java8
Stream
库,您可以用更少的代码行更有效地解决您的问题。
这个test()
函数有输入x
,它控制将要打印的X数量,范围从1
到x
,而n
则控制将根据您的要求在单独的行中打印多少X或O。
import java.util.Random;
import java.util.stream.*;
class CFG {
public static void main(String[] args) {
test(4, 10);
}
public static void test(int x, int n) {
Random random = new Random();
int countX = 1 + random.nextInt(x);
String str = random
.ints(1, n + 1)
.distinct()
.limit(n)
.mapToObj(i -> i <= countX ? "X" : "O")
.collect(Collectors.joining("\n"));
System.out.println(str);
}
}
随机输出:
X
O
O
X
O
O
O
O
X
O
这是一个更接近您的可选代码
代码:
import java.util.Random;
class main {
public static void main(String[] args)
{
test();
}
public static void test() {
Random r = new Random();
int i = r.nextInt(4)+1;
int countX=0;
for (int j=0; j<10; j++){
int p=r.nextInt(2);
if (p==1) {
System.out.println("O");
}
else{
if(countX<i){
System.out.println("X");
countX+=1;
}
else{
System.out.println("O");
}
}
}
}
}
随机输出:
X
X
X
O
X
O
O
O
O
O
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.