首页 > 解决方案 > 在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");
}

}

标签: arraylistmethodsmode

解决方案


问题出在这里

if(counter > max){
    max = counter;
    temp = arr.get(j);
}
if(counter == max){
    temp = -1;
}

您在第一个条件中分配counterto的值,max因此第二个if条件,即,if(counter == max)将始终为true,这导致temp具有-1满足的值else if(temp < 0)。这就是为什么你Mode: no single mode每次都得到输出。


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

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

推荐阅读