将方法中的数据类型应用于主测试器中的变量时出错 class

Error with applying data type in method to variables in main tester class

我怎样才能得到这个来计算双精度数组的属性。如果其他所有东西都是一个 int 内部,那仍然是一个双打数组吗?还是由于方法类型,它仍然是一个双精度数组?这是我的 class。非常感谢!

import java.util.*;
import java.lang.Math;

public class Statistics {
    private double min;
    private double max;
    private double mean;
    private double median;
    private double deviation;
    private double mode;

public static double findMin(int[] array){
         int min = array[0];  
         for(int i=1;i<array.length;i++){  
         if(array[i] < min){  
         min = array[i];  
            }  
         }  
        return min;  

    }

public static double findMax(int[] array){
        int max = array[0];
        for(int i=1;i<array.length;i++){
            if(array[i]>max){
                max=array[i];
            }
        }
        return max;

    }

public static double calcMean(int[] n){
    int sum=0;
    for (int i=0; i<n.length; i++){
        sum+= n[i];
    }
    return sum/n.length;
}

public static double calcMedian(int[] n){
    int middle = n.length/2;
    if (n.length%2==1){
        return n[middle];
    } else {
        return (n[middle]+n[middle])/2;
    }
}

public static double calcDeviation(int[] n){
    int mean = (int)calcMean(n);
    int squareSum = 0;

    for (int i = 0; i < n.length; i++) {
    squareSum += Math.pow(n[i] - mean, 2);
    }   
    return Math.sqrt((squareSum) / (n.length - 1));

}

public static double calcMode(int n[]){
    int value=0; int max=0;

    for (int i=0;i<n.length;++i){
        int count=0;
        for (int j=0; j<n.length; ++j){
            if (n[j]==n[i]) ++count;
        }
        if (count>max){
            max=count;
            value=n[i];

        }
    }

    return value;
}


}

这是我的主要方法。

import java.util.*;

public class StatisticsTester {

public static void main(String[] args) {


    Statistics test = new Statistics();
    Scanner input = new Scanner(System.in);
    //Read user  input.
    System.out.print("How many numbers do you want to enter?: ");
    int num = input.nextInt();
    double array[] = new double[num];
    System.out.println("Enter the " + num + "numbers now.");
    for (int i = 0; i < array.length; i++ )
    {
        array[i] = input.nextInt();
    }
    System.out.print("Here is the minimum, ");
    System.out.print("maximum, mean, median, ");
    System.out.println("mode, and standard deviation: ");
    System.out.print(test.findMin(num) +", " + test.findMax(num));
    System.out.print(", "+ test.calcMean(num) +", ");
    System.out.print(test.calcMedian(num) +", ");
    System.out.print(test.calcMode(num) +", ");
    System.out.print(test.calcDeviation(num));

}
}

这些是编译时的错误。

StatisticsTester.java:25: findMin(int[]) in Statistics cannot be applied to (int)
    System.out.print(test.findMin(num) +", " + test.findMax(num));
                         ^
StatisticsTester.java:25: findMax(int[]) in Statistics cannot be applied to (int)
    System.out.print(test.findMin(num) +", " + test.findMax(num));
                                                   ^
StatisticsTester.java:26: calcMean(int[]) in Statistics cannot be applied to (int)
    System.out.print(", "+ test.calcMean(num) +", ");
                               ^
StatisticsTester.java:27: calcMedian(int[]) in Statistics cannot be applied to (int)
    System.out.print(test.calcMedian(num) +", ");
                         ^
StatisticsTester.java:28: calcMode(int[]) in Statistics cannot be applied to (int)
    System.out.print(test.calcMode(num) +", ");
                         ^
StatisticsTester.java:29: calcDeviation(int[]) in Statistics cannot be applied to (int)
    System.out.print(test.calcDeviation(num));
                         ^
6 errors

有两个错误:

首先:当您执行此操作时 - test.findMin(num) 您正在尝试传递参数 num。但是 num 不是数组!这是一个数字。你可能想这样做:test.findMin(array)

其次:您可以将整数隐式转换为双精度,因为您可以确保它保持不变。但是您不能将 double 隐式转换为整数,因为您不能将例如 2,7 转换为整数。对于数组,即使 "implicit" 转换也不起作用。


适合您的解决方案,将这一行 double array[] = new double[num]; 更改为 int array[] = new int[num];,然后将所有看起来像 test.findMin(num) 的参数更改为 test.findMin(array)


对于双打,这将编译(不知道它是否按预期工作):

import java.util.*;

public class StatisticsTester {

    public static void main(String[] args) {

        Statistics test = new Statistics();
        Scanner input = new Scanner(System.in);
        //Read user  input.
        System.out.print("How many numbers do you want to enter?: ");
        int num = input.nextInt();
        double array[] = new double[num];
        System.out.println("Enter the " + num + "numbers now.");
        for (int i = 0; i < array.length; i++) {
            array[i] = input.nextDouble();
        }
        System.out.print("Here is the minimum, ");
        System.out.print("maximum, mean, median, ");
        System.out.println("mode, and standard deviation: ");
        System.out.print(test.findMin(array) + ", " + test.findMax(array));
        System.out.print(", " + test.calcMean(array) + ", ");
        System.out.print(test.calcMedian(array) + ", ");
        System.out.print(test.calcMode(array) + ", ");
        System.out.print(test.calcDeviation(array));

    }
}

import java.util.*;
import java.lang.Math;

public class Statistics {

    private double min;
    private double max;
    private double mean;
    private double median;
    private double deviation;
    private double mode;

    public static double findMin(double[] array) {
        double min = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] < min) {
                min = array[i];
            }
        }
        return min;

    }

    public static double findMax(double[] array) {
        double max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
            }
        }
        return max;

    }

    public static double calcMean(double[] n) {
        int sum = 0;
        for (int i = 0; i < n.length; i++) {
            sum += n[i];
        }
        return sum / n.length;
    }

    public static double calcMedian(double[] n) {
        int middle = n.length / 2;
        if (n.length % 2 == 1) {
            return n[middle];
        } else {
            return (n[middle] + n[middle]) / 2;
        }
    }

    public static double calcDeviation(double[] n) {
        int mean = (int) calcMean(n);
        int squareSum = 0;

        for (int i = 0; i < n.length; i++) {
            squareSum += Math.pow(n[i] - mean, 2);
        }
        return Math.sqrt((squareSum) / (n.length - 1));

    }

    public static double calcMode(double n[]) {
        double value = 0;
        int max = 0;

        for (int i = 0; i < n.length; ++i) {
            int count = 0;
            for (int j = 0; j < n.length; ++j) {
                if (n[j] == n[i]) {
                    ++count;
                }
            }
            if (count > max) {
                max = count;
                value = n[i];

            }
        }

        return value;
    }
}