arraylist - 在java中需要有关打印模式的帮助
问题描述
我的任务是创建一个方法,该方法采用 Integer obj 的 ArrayList 的参数并打印出总和、平均值和模式。
我似乎无法弄清楚如何找到模式。如果只有一种模式,它应该打印出数字,如果有多个(或无)模式,它应该打印出“没有单一模式”。我的方法只打印出“没有单一模式”。如何修复我的代码以打印出模式?
这就是我的代码:
public static void printStatistics(ArrayList<Integer> arr){
int sum = 0;
for(int i : arr){
sum += i;
}
System.out.println("Sum: "+sum);
System.out.println("Average: "+(double)sum/arr.size());
int temp = 0, counter = 0, max = 0;
for(int j = 0; j < arr.size() - 1; j++){
for(int k = j+1; k < arr.size(); k++){
if(arr.get(j) == arr.get(k)){
counter++;
if(counter > max){
max = counter;
temp = arr.get(j);
}
if(counter == max){
temp = -1;
}
}
}
}
if(temp > 0){
System.out.println("Mode: "+temp);
}
else if(temp < 0){
System.out.println("Mode: no single mode");
}
}
解决方案
问题出在这里
if(counter > max){
max = counter;
temp = arr.get(j);
}
if(counter == max){
temp = -1;
}
您在第一个条件中分配counter
to的值,max
因此第二个if
条件,即,if(counter == max)
将始终为true
,这导致temp
具有-1
满足的值else if(temp < 0)
。这就是为什么你Mode: no single mode
每次都得到输出。
改变条件应该会给你想要的输出
if(counter < max){
temp = -1;
}