问题描述
我的任务是制作一个方法,该方法采用 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
的值分配给 max
,因此第二个 if
条件即 if(counter == max)
将始终为 true
,即导致 temp
具有满足 -1
的值 else if(temp < 0)
。这就是为什么您每次都将 Mode: no single mode
作为输出。
改变条件应该会给你想要的输出
if(counter < max){
temp = -1;
}