【问题标题】:How to Set up a 2D Char Array with random Characters?如何设置具有随机字符的二维字符数组?
【发布时间】:2014-11-18 05:41:07
【问题描述】:

我正在解决一个问题,我试图获取一定百分比的字符并使用 Math.random 将它们随机填充到 5x5 数组中,以在二维数组中存储 25 个项目。我现在想出了这个,但我不明白为什么它没有填充我想要的字符。它只是在做“X”而不是随机的,它似乎与 X 的总数是一致的。我试图输出 X、O 的百分比以及剩下的空白。它只输出 10 个 X,它们似乎不是随机的。如果我能得到任何关于为什么会发生这种情况的建议,我将不胜感激。

public static void main(String []args){

        char [][] tissue = new char [5][5];

        assignCellTypes(tissue,40,40);

    }

    public static void assignCellTypes(char[][] tissue,int percentO, int percentX){


                double cellx=0.0;
                double cellO=0.0;
                double totalO=0;
                double totalX = 0;
                totalO = (double)percentO/100;


                totalX = (double)
                        percentX/100;

                        cellx = totalX *(tissue.length*tissue.length);
                        cellO = totalO *(tissue.length*tissue.length);

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


                    if(cellx>0){
                        i = (int)Math.floor(Math.random()*tissue.length);
                        j = (int)Math.floor(Math.random()*tissue.length);

                        tissue[i][j] = 'X';
                        System.out.print(tissue[i][j] + "  ");

                        cellx--;

                        if(cellO>0 && tissue[i][j] != 'X' ){
                            i = (int)Math.floor(Math.random()*tissue.length);
                            j = (int)Math.floor(Math.random()*tissue.length);

                            tissue[i][j] = 'O';
                            System.out.print(tissue[i][j] + "  ");
                            cellO--;

                    if(tissue[i][j] != 'X' && tissue[i][j] != 'O'){

                        tissue[i][j] = ' ';

                        System.out.print(tissue[i][j] + "  ");

                    }
                        }



                    }


            }
            System.out.println();
        }


    }
}

【问题讨论】:

    标签: java arrays random


    【解决方案1】:

    我不完全知道您要归档什么,但您似乎只是想用 XO 随机填充一个 char 数组以及一个机会因素,在这种情况下有很多更简单的解决方案

    public static void assignCellTypes(char[][] tissue, int percentO, int percentX)
    {
        double chanceO = percentO / (double) ( percentO + percentX );
    
        Random r = new Random(); //java.util.Random
    
        for(int i=0; i < tissue.length; i++)
            for(int j=0; j < tissue[i].length; j++)
                if( r.nextDouble() <= chanceO )
                    tissue[i][j] = 'O';
                else
                    tissue[i][j] = 'X';
    }
    

    编辑@comment,我认为这是您想要实现的目标:

    public static void assignCellTypes(char[][] tissue, int percentO, int percentX)
    {
        if(percentO + percentX > 100)
            throw new Exception("You can't have more than 100%!");
    
        double chanceO = percentO/100d;
        double chanceX = percentX/100d;
    
        Random r = new Random(); //java.util.Random
    
        for(int i=0; i < tissue.length; i++)
            for(int j=0; j < tissue[i].length; j++)
            {
                double random = r.nextDouble();
    
                if( random <= chanceO )
                    tissue[i][j] = 'O';
                else if( random <= chanceO + chanceX )
                    tissue[i][j] = 'X';
            }
    }
    

    【讨论】:

    • 我想要实现的是用特定百分比的 X 和 O 随机填充 char 数组。所以如果我的数组可以填充 25 个项目(5x5 数组)并且我的 X 百分比和 O 是 40每个,那是 10 个 O 和 10 个 X,其余 5 个我想是空格。所有随机通过 Math.random()。我得到了随机实用程序的方式,我试图通过 Math.random() 来做到这一点。我不明白为什么在我的代码中只打印 X,而不是随机打印,而不是 O。
    • @NickCage 它只打印 X 的原因是因为代码检查 cellx > 0,然后随机写入 X,执行 cellx--,然后检查您刚刚写的位置是否没有 X一个 X 到,然后重新开始,直到 cellx 小于 1。之后它只是循环而不做任何事情。您应该更好地格式化您的代码,它在当前状态下非常不可读。我对我的回答做了一些修改,请检查我的代码是否适合你
    • 不,它不是网格形式,而是在 5x5 二维数组中打印出 30 个字符
    • 那是因为它只在放置一个字符时打印,如果它放置了一个字符,它会在另一次打印,因为它只在任何地方放置 Xes,它只打印 X
    猜你喜欢
    • 2015-10-24
    • 2019-08-04
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多