【问题标题】:How can i randomly select only one size in a two-dimensional array如何在二维数组中仅随机选择一种尺寸
【发布时间】:2019-11-12 09:18:48
【问题描述】:
String[] dizi_paragraf = dosya.split("\n");
for (int i = 0; i < dizi_paragraf.length; i++) {
    String[] dizi_cumle = dizi_paragraf[i].split("\\.");
    String[][] dizi_total = new String[dizi_paragraf.length][dizi_cumle.length];
    int[][] dizi = new int[dizi_paragraf.length][dizi_cumle.length];
    for (int j = 0; j < dizi_cumle.length; j++) {
        dizi_total[i][j] = dizi_cumle[j];
        dizi[i][j] = j;
        System.out.println(dizi[i][j]);
    }
}

输出:

0-0
0-1
1-0
1-1
1-2
2-0
3-0
3-1
4-0
4-1
5-0
5-1
5-2
5-3

我想要这个:

    0-1
    0-0
    1-1
    1-0
    1-2
    2-0
    3-1
    3-0
    4-0
    4-1
    5-3
    5-1
    5-0
    5-2

这是一个例子。 每个 i 的 j 中的值随机变化,但直到 j 长度。 我怎样才能做到这一点?你有什么想法吗? 例如,它应该为索引 0 生成 0 或 1。它应该为第一个索引生成 0.1 或 2。 2. indis 应该只取 0。等等 只是例子。这可以改变。我动态地接受这个。

“i”必须是常数。但是 j 应该是随机选择的。对于索引 0,j 值:0 和 1。这应该随机选择。对于索引 1,j 值:0,1 和 2。这应该随机选择。

【问题讨论】:

  • 您提供的代码与输出不匹配。
  • 我认为输出与i+"-"+j匹配

标签: java arrays random


【解决方案1】:

试试下面的方法:

        String dosya = "Test cumle 1. CUmle 2.\nCumle 3 here. Next sentences. Last sentences.";

        String[] dizi_paragraf = dosya.split("\n");
        for (int i = 0; i < dizi_paragraf.length; i++) {
            String[] dizi_cumle = dizi_paragraf[i].split("\\.");
            String[][] dizi_total = new String[dizi_paragraf.length][dizi_cumle.length];
            int[][] dizi = new int[dizi_paragraf.length][dizi_cumle.length];

            List<Integer> jj = new ArrayList<>();
            for (int j = 0; j < dizi_cumle.length; j++) {
                jj.add(j);
            }
            Collections.shuffle(jj);
            for (int j:jj) {
                dizi_total[i][j] = dizi_cumle[j];
                dizi[i][j] = j;
                System.out.println("dizi[i][j] "+i+"-"+j);
            }
        }

【讨论】:

    【解决方案2】:

    以下解决方案不使用 Collection.shuffle,仅使用随机生成器和数组。

    String[] dizi_paragraf = dosya.split("\n");
    Random r = new Random();
    
    for (int i = 0; i < dizi_paragraf.length; i++) {
        String[] dizi_cumle = dizi_paragraf[i].split("\\.");
        String[][] dizi_total = new String[dizi_paragraf.length][dizi_cumle.length];
        int[][] dizi = new int[dizi_paragraf.length][dizi_cumle.length];
    
        for (int j = 0; j < dizi_cumle.length; j++) {
            int rNumber = 0;
            boolean unique=false;
            while (!unique){
               unique=true;
               rNumber = r.nextInt(dizi_cumle.length);
                for (int jj = 0; jj < j; jj++) {
                    if (dizi[i][jj] == rNumber) {
                        unique = false;
                        break;
                    }
                }
            }
            dizi_total[i][j] = dizi_cumle[j];
            dizi[i][j] = rNumber;
            System.out.println(i + "-" + dizi[i][j]);
        }
    }
    

    对于每个 j,while 循环以 unique=false 开始。它获取一个随机数 r.nextInt(dizi_cumle.length) 并将唯一性设置为 true。然后它在第二维 j 上的 dizi[][] 数组上执行 for 循环,直到找到先前设置的数字。如果 for 循环在没有输入 if (dizi[i][jj] == rNumber) 的情况下结束,则 unique 永远不会设置为 false 并且 while 退出。最后将数字设置到数组中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多