【问题标题】:How can I write an array generator that generates numbers in certain column values?如何编写一个在某些列值中生成数字的数组生成器?
【发布时间】:2021-01-26 01:58:59
【问题描述】:

您好 :) 我编写了这个数组生成器,并想重写它,以便您可以设置各个列值的取值范围。

例如:第一列是 0 或 1,它们右侧的值是 3 或 7,其他列的值在 0 和 1 之间(因此现在所有数字)。

1 ; 3; 0.68618 ; 0.98135 ; 0.25489 ; ...

1 ; 7; 0.32481; 0.25871; 0.14697 ; ...

0 ; 7; 0.96125; 0.36815; 0.24863 ; ...

......

public class scratch{

    public static void main(String[] args) {
        double values[][] = new double[10][19];
        for (int i = 0; i < values.length; i++) {

            for (int j = 0; j < values[i].length; j++) {

                values[i][j] = ((double) (Math.random()));
                System.out.print(values[i][j]+" ; ");
            }
            System.out.println();

        }
    }
}

PS:请原谅我的英语不好

【问题讨论】:

  • 你面临的问题是什么?
  • 我不知道,如何重写/制作它

标签: java arrays random generator


【解决方案1】:

迭代时只检查列的索引,第一列是j == 0,第二列是j == 1。要在 0 和 1 或 3 和 7 之间交替,只需创建一个随机数,如果小于 0.5,则取 0,如果不取 1(或 3 或 7)

public static void main(String[] args) {
    double values[][] = new double[10][19];
    for (int i = 0; i < values.length; i++) {
        for (int j = 0; j < values[i].length; j++) {
            if(j==0){
                values[i][j] = Math.random() < 0.5 ? 0 : 1;
            }
            else if(j==1){
                values[i][j] = Math.random() < 0.5 ? 3 : 7;
            }
            else{
                values[i][j] =  Math.random();  // to round it to 4 decimal places: Math.floor(Math.random() * 10000) / 10000;                
            }
            System.out.print(values[i][j]+" ; ");
        }
        System.out.println();
    }
}

编辑

你可以扩展这个方法

if(j==0){
    values[i][j] = Math.random() < 0.5 ? 0 : 1;
}

从四个中选择一个(在 [23, 42, 69, 1001] 之间)使用类似的东西:

if(j==0){
    double x = Math.random();
    values[i][j] = x < 0.25 ? 23 : x < 0.5 ? 42 : x < 0.75 ? 69 : 1001;
}

但这很快就会变得难以辨认,尤其是当您以后想从更多数字中进行选择时。因此,我建议您将可能的值存储在一个数组中并随机选择一个索引。这样您可以在必要时添加更多值,而无需每次都更改代码:

if(j==0){                
    int[] myValues = {23, 42, 69, 1001};
    values[i][j] = myValues[ (int) (Math.random()*myValues.length)];
}

【讨论】:

  • 啊,是的,非常感谢 :) 这一行的一个问题: values[i][j] = Math.random()
  • 再次感谢你:)
  • 如果我想输出 j == 0 和 j == 1 的 4 个数字之一,但是这两个数字不能相同 - 我该怎么做? (例如:j == 0 返回 23,j == 1 返回 42、69 或 1001(但仍然是随机的))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2013-01-30
  • 1970-01-01
  • 2014-08-26
相关资源
最近更新 更多