gpt4 book ai didi

java - 如何在数组中保存运行计数?

转载 作者:行者123 更新时间:2023-11-30 05:24:22 27 4
gpt4 key购买 nike

该方法称为loadArray(),该方法将加载一个具有指定数量的随机值的数组,并更新数组中的下标以反射(reflect)随机数生成的次数。这些值将在 (0,values.length-1) 之间。签名是public static void loadArray(int[] value, int times)

最佳答案

嗯,正如您所评论的,本质上您想要一个函数来计算一个值在数组中出现的次数,然后用出现的计数更新数组(相应的元素)。

换句话说,您希望使用数组中出现的各自“频率”来更新这些值。

为此,我向您建议一种使用 Map 结构的方法。

那么它是如何工作的呢?

排除数组生成步骤(仅考虑计数步骤),我们可以想象将传递数组的每个值放入 map 中,仅检查该值之前是否已插入。

然后,映射是可以保存一些信息并将该信息与键相关联的结构,这就是已知的格式“键/值”。

实现

好的,为了实现这一点,让我们考虑一个方法,该方法生成一个包含随机数的数组,对其进行计数,然后根据需要返回一个更新的数组:

public static int[] count(int arrayLength, int rangeOfRandom) {
//generates the randons
Random generator = new Random();
int[] array = new int[arrayLength];
for (int i = 0; i < array.length; i++) {
array[i] = generator.nextInt(rangeOfRandom);
}

System.out.println("The generated array was: " +
Arrays.toString(array));

//counts each value
HashMap<Integer, Integer> aux = new HashMap<>();
for (int i = 0; i < array.length; i++) {
//if the map DOES NOT contains the current array value
if (!aux.containsKey(array[i])){
aux.put(array[i], 1); //puts it with "1 counter"
} else {
//if not...
//...overrides the existing value with itself PLUS 1
aux.put(array[i], aux.get(array[i]) + 1);
}
}

//updates the array
int[] nArray = new int[array.length];
for (int key : aux.keySet()){
for (int i = 0; i < array.length; i++) {
if (array[i] == key){
nArray[i] = array[i] + aux.get(key);
}
}
}

//here we return the updated array
return nArray;
}

通过做

System.out.println("The result array is: " +
Arrays.toString(count(5, 10)));

你会得到这样的输出:

The generated array is: [0, 6, 6, 8, 7]
The result array is: [1, 8, 8, 9, 8]

如您所见,这些操作非常基本,您可以轻松重构它以接收/返回其他参数和/或类型。

相关讨论,可以查看这个question .

观察:我发布的方法没有经过优化,仅用于说教用途。

关于java - 如何在数组中保存运行计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58966458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com