【发布时间】:2021-07-27 02:55:15
【问题描述】:
我正在开发一个项目,该项目提示用户创建并用整数填充数组,然后显示该数组的平均值、众数、中位数和标准差。它首先询问用户数组的大小,输入的数字将声明和初始化数组。然后程序将迭代几次,要求用户声明一个整数值,每个值都将存储到数组中,直到数组被填满。然后程序将打印数组的内容,以及平均值、众数、中位数和标准差。
我的代码似乎满足所有这些要求。但是,我正在努力的一件事是模式。虽然它确实打印出数组中重复次数最多的数字,但它没有考虑具有相同重复次数的多个模式,也没有考虑没有模式会发生什么。
现在,如果两个数字各输入两次,则显示的模式是第一个重复多次的数字。例如,如果我有一个 10 个整数的数组大小,并且我输入的整数是 1、2、2、3、3、4、5、6、7、8,它将打印出模式的“2.0”打印“2.0”和“3.0”。如果没有模式,它只是输入第一次输入的数字,而不是说“无”。
实现这一目标的最佳行动方案是什么?
这是我的代码:
import java.util.*;
public class ArrayStatistics {
public static void main(String[] args) {
double total = 0;
Scanner input = new Scanner(System.in);
System.out.print("Enter the size of your array >> ");
int size = input.nextInt();
double[] myArray = new double[size];
System.out.print("Enter the integer values >> ");
for (int i=0; i<size; i++) {
myArray[i] = input.nextInt();
}
System.out.println("\nIntegers:");
for (int i=0; i<size; i++) {
System.out.println(myArray[i]);
}
double mean = calculateMean(myArray);
System.out.println("\nMean: " + mean);
double mode = calculateMode(myArray);
System.out.println("Mode: " + mode);
double median = calculateMedian(myArray);
System.out.println("Median: " + median);
double SD = calculateSD(myArray);
System.out.format("Standard Deviation: %.6f", SD);
}
public static double calculateMean(double myArray[]) {
int sum = 0;
for(int i = 0; i<myArray.length; i++) {
sum = (int) (sum + myArray[i]);
}
double mean = ((double) sum) / (double)myArray.length;
return mean;
}
public static double calculateMode(double myArray[]) {
int modeCount = 0;
int mode = 0;
int currCount = 0;
for(double candidateMode : myArray) {
currCount = 0;
for(double element : myArray) {
if(candidateMode == element) {
currCount++;
}
}
if(currCount > modeCount) {
modeCount = currCount;
mode = (int) candidateMode;
}
}
return mode;
}
public static double calculateMedian(double myArray[]) {
Arrays.sort(myArray);
int val = myArray.length/2;
double median = ((myArray[val]+myArray[val-1])/2.0);
return median;
}
public static double calculateSD(double myArray[]) {
double sum = 0.0;
double standardDeviation = 0.0;
int length = myArray.length;
for(double num : myArray) {
sum += num;
}
double mean = sum/length;
for(double num : myArray) {
standardDeviation += Math.pow(num - mean, 2);
}
return Math.sqrt(standardDeviation/length);
}
【问题讨论】: