【问题标题】:replace increasing digits of an array替换数组的递增数字
【发布时间】:2020-09-24 05:36:04
【问题描述】:

我生成了一个固定长度的char数组形式的随机二进制数

    public char[] biNum(int length) {

        char[] biStr = new char[length];
        for (int i=0; i<length; i++) {
            biStr[i] = (char)r.nextInt(1);
        }
        return biStr;
    }

如何在其中的随机位置获得多个具有增量“*”的数组? 例子:如果长度是8,那么

100*10*1 has 2 '*'
10*01*** has 4 '*'
0******1 has 6 '*'

我不想在这里获取二维数组。但如果这更容易,那我也可以接受

    for (i = 2; i < length; i+2){
        biNum(20);
        //some method that adds i '*' in biStr
        System.out.println(biStr);
    }

我的想法是,在 for 循环中添加另一个循环

for (j = 0; j < i; j++)
    generate j random numbers
    for every random number
        biStr[random number] = '*'

但是我需要确保没有重复的随机数。我不知道该怎么做。

【问题讨论】:

标签: java arrays random


【解决方案1】:

这不是生成此类的最快方法,而是实现它的方法之一。

import java.util.Random;

public class BitCount {
        public static void main(String[] args) {
                char[] c = new char[20];
                Random rand = new Random();
                int limit = 8;
                int i = 0;
                for ( i = 0 ; i < limit ; i++ ) {
                        c[i] = '*';
                }
                for ( i = limit ; i < 20 ; i++ ) {
                        int r = rand.nextInt(2);
                        c[i] = (char)((int)'0' + r);
                }
                for ( i = 0 ; i < 100 ; i++ ) {
                        int i_from = rand.nextInt(20);
                        int i_to = rand.nextInt(20);
                        if ( i_from != i_to ) {
                                char cz = c[i_to];
                                c[i_to] = c[i_from];
                                c[i_from] = cz;
                        }
                }
                System.out.println(new String(c));
        }
}

【讨论】:

猜你喜欢
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多