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