计数器不能以一系列的方式工作

时间:2015-04-07 19:33:58

标签: java arrays count

我正在练习查找最大值和最小值,但我想跟踪我拥有的这些值的实例数。程序确实找到了最小值和最大值,但它没有给出值在数组中出现的次数,因此我的计数器不起作用。有人可以帮我一把吗?谢谢!

    int[] values = {222,34,56,222,45,1,3,222,56,10,15,56,1,222,12,23,1,222};

    int minValue = values[0];
    int maxValue = values[0];
    int counterMinValue = 0;
    int counterMaxValue = 0;
    int i;


    for(i = 0; i < values.length; i++){
        if (values[i] < minValue){
            minValue = values[i];
            counterMinValue++;
        }
    }

    for(i = 0; i < values.length; i++){
        if(values[i] > maxValue){
            maxValue = values[i];
            counterMaxValue++;
        }
    }
    System.out.printf("The min value of this array is%2d and is repeated%2d times(s)", minValue, counterMinValue);
    System.out.printf("\nThe max value of this array is %2d and is repeated %2d time(s)", maxValue, counterMaxValue);

这是输出:

此数组的最小值为1,重复2次

此数组的最大值为222,重复0次

2 个答案:

答案 0 :(得分:3)

我会做类似的事情:

for (i = 1; i < values.length; i++) {
    if (values[i] == minValue) {
        counterMinValue++;
    }
    else if (values[i] < minValue) {
        minValue = values[i];
        counterMinValue = 1;
    }

    if (values[i] == maxValue) {
        counterMaxValue++;
    }
    else if (values[i] > maxValue) {
        maxValue = values[i];
        counterMaxValue = 1;
    }
}

基本上对于你所拥有的循环是相同的,除了它检查当前值是否等于minValue,如果是,则添加到计数器,否则如果值较低则设置{{ 1}}到当前值并重置计数器,然后对最大值执行相同操作。我把它放在一个minValue中,因为没有必要两次迭代同一个列表(使用更大的数据集会对性能产生很大影响)。我将计数器默认为1,以便计算数组中的当前元素,而不仅仅是每个元素等于它。

同样,你可能想要:

for-loop

编辑: 在您的示例中,最大(也可能是最小)值是数组中的第一个值,由于此部分,它将被计数两次:

int counterMinValue = 1;
int counterMaxValue = 1;

要更正此问题,您可以将for循环更改为从1开始(因为您已将最小值和最大值设置为数组中的第一个项目,您无需将其与自身进行比较:if (values[i] == maxValue) { counterMaxValue++; } 我在上面的代码中已经更正了。

答案 1 :(得分:0)

    int[] values = {222,34,56,222,45,1,3,222,56,10,15,56,1,222,12,23,1,222};

    int minValue = values[0];
    int maxValue = values[0];
    int counterMinValue = 0;
    int counterMaxValue = 0;
    int i;


    for(i = 0; i < values.length; i++){
        if (values[i] == minValue) {
            counterMinValue++;
        }
        else if (values[i] < minValue){
            minValue = values[i];
        }
    }

    for(i = 0; i < values.length; i++) {
        if (values[i] > maxValue) {
            maxValue = values[i];

        } else if (values[i] == maxValue) {
            counterMaxValue++;
        }
    }

    System.out.printf("The min value of this array is%2d and is repeated%2d times(s)", minValue, counterMinValue);
    System.out.printf("\nThe max value of this array is %2d and is repeated %2d time(s)", maxValue, counterMaxValue);
}

我得到了这些结果:

The min value of this array is 1 and is repeated 3 times(s)
The max value of this array is 222 and is repeated  5 time(s)