Java 使用随机数生成X/0图案(无硬代码)

Java 使用随机数生成X/0图案(无硬代码),java,Java,我想用1到4之间的随机数生成一个特定的模式。模式如下所示: 1 = X000000000 2 = X0000X0000 3 = X00X00X000 4 = X0X0X0X000 基本上,随机数表示模式中要使用多少个X,并且0将定期填充 有没有一种不使用硬编码变量生成这些模式的方法 编辑 因为它看起来不容易理解,所以我在这里详细描述了所有内容:我使用以下代码定义程序对随机生成的每个数字必须输出的内容: if (i == 1){ System.println("X000000000");

我想用1到4之间的随机数生成一个特定的模式。模式如下所示:

1 = X000000000
2 = X0000X0000
3 = X00X00X000
4 = X0X0X0X000
基本上,随机数表示模式中要使用多少个X,并且0将定期填充

有没有一种不使用硬编码变量生成这些模式的方法

编辑

因为它看起来不容易理解,所以我在这里详细描述了所有内容:我使用以下代码定义程序对随机生成的每个数字必须输出的内容:

 if (i == 1){
 System.println("X000000000");
 if (i == 2){
 System.println("X0000X0000");
 if (i == 3){
 System.println("X00X00X000");
 if (i == 4){
 System.println("X0X0X0X000");
有没有一种方法不包括使用硬编码的if问题

1-4的模式总是这样。这取决于生成的数字和输出的内容。

尝试以下方法:

public static void main(String[] args) {
    System.out.println(generatePattern(1, 10));
    System.out.println(generatePattern(2, 10));
    System.out.println(generatePattern(3, 10));
    System.out.println(generatePattern(4, 10));
}

public static String generatePattern(int count, int length) {
    int frequency = length / count;
    StringBuilder pattern = new StringBuilder();
    for (int i = 0; i < length; i++) {
        pattern.append(i % frequency == 0 && i < frequency * count ? 'X' : '0');
    }
    return pattern.toString();
}

不是最有效的,你也可以试试这个

public String randomShuffle(int countOfX) {
        String allX = "XXXXXXXXXX";
        int localCount = 0;
        List<Character> characters = new ArrayList<Character>();
        for (char c : allX.toCharArray()) {
            if(localCount < countOfX){
                characters.add(c);
                localCount++;
            }else{
                characters.add('0');
            }

        }
        StringBuilder output = new StringBuilder(allX.length());
        while (characters.size() != 0) {
            int randPicker = (int) (Math.random() * characters.size());
            output.append(characters.remove(randPicker));
        }
        //System.out.println(output.toString());
        return output.toString();
    }
publicstringrandomshuffle(int countOfX){
字符串allX=“xxxxxxxxx”;
int localCount=0;
列表字符=新的ArrayList();
for(char c:allX.toCharArray()){
if(localCount
它的哪一部分是随机的?是的,你可以,但是你需要添加更多关于这个模式应该是什么样子的详细信息。X应该占据哪些位置?
有规律的间隔
?我看不出来。所以我的想法是在10个字符中保持尽可能大的间距?非常感谢,这正是我想要的!
public String randomShuffle(int countOfX) {
        String allX = "XXXXXXXXXX";
        int localCount = 0;
        List<Character> characters = new ArrayList<Character>();
        for (char c : allX.toCharArray()) {
            if(localCount < countOfX){
                characters.add(c);
                localCount++;
            }else{
                characters.add('0');
            }

        }
        StringBuilder output = new StringBuilder(allX.length());
        while (characters.size() != 0) {
            int randPicker = (int) (Math.random() * characters.size());
            output.append(characters.remove(randPicker));
        }
        //System.out.println(output.toString());
        return output.toString();
    }