试图证明多态性,但是无法让我的方法接受我的ArrayLists

时间:2018-12-09 20:22:44

标签: polymorphism

我在最后两行尝试从Math类调用该方法时遇到错误。错误是说“ Math类型的方法computeAverage(int [])不适用于参数(ArrayList)”。

我不确定为什么会遇到这个问题。

这是我的数学课:

public class Math {

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


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

这是我的主音:

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {
     ArrayList<Number> d = new ArrayList();
     ArrayList<Number> numbers = new ArrayList();

     d.add(1);
     d.add(2);
     d.add(3);
     d.add(16);
     d.add(20);
     d.add(100);

     numbers.add(21.7);
     numbers.add(37.5);
     numbers.add(6.3);

     Math.computeAverage(d);
     Math.computeAverage(numbers);

}

}

1 个答案:

答案 0 :(得分:0)

int[]double[]是原始数组,它们与ArrayList之类的集合类不直接兼容。

自从您提到了多态性以来,我相信您要尝试的是拥有一个既可以在intdouble上运行的方法。您的main方法中的设置非常有用:您已经可以将int和double值都添加到ArrayList<Number>中,因为NumberInteger和{的超类{1}}。

您需要更改的是Double方法。您不需要两个副本,只需要一个带有computeAverage的副本,该副本就可以处理任何类型的数字:

List<Number>