Пытаюсь продемонстрировать полиморфизм, но не могу заставить мои методы принять мои ArrayLists - PullRequest
0 голосов
/ 09 декабря 2018

Я сталкиваюсь с ошибкой в ​​последних двух строках, пытаясь вызвать метод из моего класса Math.Ошибка говорит: «Метод computeAverage (int []) в типе Math не применим для аргументов (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 голосов
/ 12 декабря 2018

int[] и double[] являются примитивными массивами, они не совместимы напрямую с классами коллекций, такими как ArrayList.

Поскольку вы упомянули полиморфизм, я думаю, что вы пытаетесь сделать этоесть один метод, который может работать как на int с, так и на double с.Настройка в вашем методе main хороша для этого: вы уже можете добавлять значения типа int и double в ArrayList<Number>, поскольку Number является суперклассом Integer и Double.

* 1014.* То, что вам нужно изменить, - это метод computeAverage.Вам не нужно две копии, вам нужна только одна, которая займет List<Number>, которая сможет работать с любым номером:
public static double computeAverage(List<Number> numbers) {
  double sum = 0;
  for (Number n : numbers) {
    sum += n.doubleValue();
  }
  return sum / n.size();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...