首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多行中随机化两个字符?

如何在多行中随机化两个字符?
EN

Stack Overflow用户
提问于 2020-09-16 09:00:31
回答 4查看 133关注 0票数 0

我需要一个随机数1-4 "X“,而其余的6-9个字符都将是"O”。整个输出需要打印到控制台内的10行中。

到目前为止,我可以从"X“的1-4中生成6 "O”和一个随机数。然而,我不知道如何使X在O中随机传播,而O将填充丢失的X。

换句话说:如果代码只生成2 "X“,我需要8 "O",这样才能生成10个字符。现在我还得把它打印成10行。我碰巧对java非常陌生,所以下面的代码是我到目前为止所掌握的全部代码。

代码语言:javascript
复制
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");
            }
        }
    }
} 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-09-16 09:21:50

此方法生成一行与您想要的行类似的代码:

代码语言:javascript
复制
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行这样的代码,您可以运行以下代码:

代码语言:javascript
复制
for(int i=0;i<10;i++)
    System.out.println(randomLine());
票数 2
EN

Stack Overflow用户

发布于 2020-09-16 09:26:17

在创建包含随机数量Xs的数组/列表之后,您可以使用现有的Arrays.shuffle / Collections.shuffle随机化数据的数组/集合:

代码语言:javascript
复制
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());
}

输出(随机):

代码语言:javascript
复制
[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]
票数 1
EN

Stack Overflow用户

发布于 2020-09-16 09:53:25

使用Java8 Stream库,您可以使用更少的代码行更有效地解决问题。

test()函数具有输入x,该输入控制从1x将打印多少个X,而控制有多少1X或E 111OOE 212的n将按您的要求在单独的行中打印。

代码语言:javascript
复制
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);
    }
}

随机输出:

代码语言:javascript
复制
X
O
O
X
O
O
O
O
X
O
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63916624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档