Java 在二维数组中以一定比例均匀分布随机值

Java 在二维数组中以一定比例均匀分布随机值,java,arrays,multidimensional-array,random,Java,Arrays,Multidimensional Array,Random,假设我有一个百分比比率列表 Map<Integer, Integer> ratio = new HashMap<Integer, Integer>(); ratio.put(0, 10); ratio.put(1, 50); ratio.put(3, 40); 现在,我想随机但均匀地将定义的值0、1和3以其各自的比率10、50和40分布在该数组中 我该怎么做呢?用第一个零、第二个1、然后是3填充一维数组 比如: int arr[N][M] = //; int array

假设我有一个百分比比率列表

Map<Integer, Integer> ratio = new HashMap<Integer, Integer>();
ratio.put(0, 10);
ratio.put(1, 50);
ratio.put(3, 40);
现在,我想随机但均匀地将定义的值
0
1
3
以其各自的比率
10
50
40
分布在该数组中


我该怎么做呢?

用第一个零、第二个1、然后是3填充一维数组

比如:

int arr[N][M] = //;
int array[N*M] = //;
int total_array_2D_size = N * M;
int j = 0;
Set<Map.Entry<Integer, Integer>> set = ratio.entrySet();  

for (Map.Entry<Integer, Integer> entry : set)
{
    int k = entry.getKey();        // Take the number
    int ratio = entry.getValue();  // Take the ratio
    int N = (total_array_2D_size * ratio) / 100; // The number of times 'k' should
                                                 // appear on the finally 2D array

    for(int i = 0; i < N; i++,j++) array[j] = k; // Fill the 1D array
}
int-arr[N][M]=/;
整数数组[N*M]=/;
int total_array_2D_size=N*M;
int j=0;
Set=ratio.entrySet();
for(Map.Entry:set)
{
int k=entry.getKey();//取数字
int ratio=entry.getValue();//取比率
int N=(总数组大小*比率)/100;//应使用“k”的次数
//显示在最终二维数组中
对于(int i=0;i
然后在你的1D阵法中使用。最后填充二维数组

for(int i = 0,k = 0; i < N; i++)
  for(int j = 0; j < M; j++,k++)
     arr[i][j] = array[k];
for(int i=0,k=0;i

由于您的2D阵列有2500个位置(50^2),因此在“最终”中,您应该有250'0'(0.10*50^2)、1250'1'(0.50*50^2)和1000'3'(0.4*50^2)。

+1这是最好的答案,考虑到问题似乎是在寻找最终结果中的确切比率。回答得好!非常感谢。:)
for(int i = 0,k = 0; i < N; i++)
  for(int j = 0; j < M; j++,k++)
     arr[i][j] = array[k];