Java 如何在数组中保持运行计数?
该方法称为Java 如何在数组中保持运行计数?,java,arrays,Java,Arrays,该方法称为loadArray(),此方法将加载具有指定数量随机值的数组,并更新数组中的下标以反映随机数的生成次数。这些值将介于(0,value.length-1)之间。签名是publicstaticvoidloadarray(int[]values,int times)正如您所评论的,本质上您需要一个函数来计算一个值在数组中出现的次数,然后用相应的计数更新数组(相应的元素) 换句话说,您希望使用数组中显示的相应“频率”更新值 要做到这一点,我建议您使用Map结构 那么它是如何工作的呢? 排除数组
loadArray()
,此方法将加载具有指定数量随机值的数组,并更新数组中的下标以反映随机数的生成次数。这些值将介于(0,value.length-1)之间。签名是publicstaticvoidloadarray(int[]values,int times)正如您所评论的,本质上您需要一个函数来计算一个值在数组中出现的次数,然后用相应的计数更新数组(相应的元素)
换句话说,您希望使用数组中显示的相应“频率”更新值
要做到这一点,我建议您使用Map结构
那么它是如何工作的呢?
排除数组生成步骤(仅考虑计数步骤),我们可以想象只需将传递数组的每个值放入映射中
,只需检查该值之前是否插入
然后,映射
是一种结构,它可以保存一些信息,同时将这些信息关联到一个键,这是已知的格式“键/值
”
实施
OK,为了实现这一点,让我们考虑一种方法,它生成一个具有随机数的数组,对它进行计数,然后,根据需要返回一个更新的数组:
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;
}
您会得到如下输出:
The generated array is: [0, 6, 6, 8, 7]
The result array is: [1, 8, 8, 9, 8]
如您所见,这些操作是非常基本的,您可以轻松地对其进行重构以接收/返回其他参数和/或类型
有关相关讨论,您可以选中此项
Obs.:我发布的方法没有经过优化,只供DITATIC使用。你能提供一些你尝试过的代码吗?你是在要求一种算法来计算传递数组中存在的相同元素的数量吗?@LucasSousa是的,我需要这样做,每次生成一个值时,都会向该值添加一个计数器1
The generated array is: [0, 6, 6, 8, 7]
The result array is: [1, 8, 8, 9, 8]