需要有关 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 的值分配给 max,因此第二个 if 条件即 if(counter == max) 将始终为 true,即导致 temp 具有满足 -1 的值 else if(temp < 0)。这就是为什么您每次都将 Mode: no single mode 作为输出。


改变条件应该会给你想要的输出

if(counter < max){
    temp = -1;
}