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]