首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在二维数组中随机选择一个大小?

如何在二维数组中随机选择一个大小?
EN

Stack Overflow用户
提问于 2019-11-12 09:18:48
回答 2查看 52关注 0票数 0
代码语言:javascript
复制
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]);
    }
}

输出:

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

我想要这个:

代码语言:javascript
复制
    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.您应该只取0作为indis。等等。就举个例子。这可以是改变。我动态地接受这个。

“我”必须是不变的。但是j应该是随机的。对于indice 0,j值:0和1。这是随机选择的。对于indice 1,j值: 0,1和2,应该随机选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-12 10:30:29

试一试如下所示:

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

Stack Overflow用户

发布于 2019-11-12 11:52:00

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

代码语言:javascript
复制
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退出。最后将数字设置到数组中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58815472

复制
相关文章

相似问题

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