首页 > 解决方案 > 如何在数组的随机索引位置计算随机出现的值

问题描述

可以说我有任何大小的数组。由于“某些操作”,数组的随机索引开始出现数字 20。这个 20 值可以是任何其他定义的值,但例如,让它为 20。所以如果我有数组int a[]={1,2,3,4,5..,10}并且我做某事,数组将是 int a[]={20,2,20,20,5,..,10}. 假设我有三个计数器称为int a, int b, int c;

int a如果被 20 替换的值是 1,则Counter -> 仅增加 1。

如果被 20 替换的值是 3,则Counter int b-> 仅增加 1。

如果被 20 替换的值是 4,则Counter int c-> 仅增加 1。

计数器可以是任何值,不仅是1,3,4

然后,当我从包含值 20 的数组中选择随机索引时,我想将正确的计数器加一。因此,如果我得到随机索引 [0],我想将计数器增加int a一。

我怎么能做这样的事情?谢谢你。

标签: javaarrays

解决方案


您可以直接使用一系列if语句或一个switch语句。

int[] array ={1,2,3,4,5,...,10};
int a = 0, b = 0, c = 0;
int index = ThreadLocalRandom.current().nextInt(array.length); //random index
switch(array[index]){
    case 1: ++a; break;
    case 3: ++b; break;
    case 4: ++c; break;
}
array[index] = 20;

使用 a 更简单,使用Map这种数据结构更容易泛化算法。

Map<Integer, Integer> count = new HashMap<>();
count.merge(array[index], 1, Integer::sum);
array[index] = 20;
// use count.getOrDefault(1, 0) to get the number of elements whose 
// values were 1 before being changed to 20

推荐阅读