Как перебрать список массивов классов - PullRequest
0 голосов
/ 29 июня 2018
import java.util.ArrayList;

public class circleTester {

        public static void showCenter(Circle2 circle) {
            System.out.println(circle.getName() + "'s " + circle.getCenter());
        }

    public static void main (String []args) {

        ArrayList<Circle2> circles = new ArrayList<Circle2>();
        circles.add(new Circle2(3, 5, 4));
        circles.add(new Circle2(4, 2, 5));
        circles.add(new Cylinder2(5, 2, 3, 5));
        circles.add(new Cylinder2(3, 4, 7, 6));
        circles.add(new Oval2(6, 5, 7, 3));
        circles.add(new Oval2(4, 2, 3, 1));
        circles.add(new OvalCylinder2(2, 3, 4, 5, 6));
        circles.add(new OvalCylinder2(3, 3, 5, 4, 7));

        for (Circle2 i : circles) {
            showCenter(circles(i));
        }
      }
    }

У меня есть четыре отдельных класса: Circle2, Cylinder2, Oval2 и OvalCylinder2. Все они получены из Circle2 и OvalCylinder2. Я пытаюсь поместить их в список массивов, а затем перебрать список массивов и запустить каждый экземпляр с помощью функции showCenter, которая вызовет два метода get (getName и getCenter), чтобы сообщить вам имя класса (Circle, Cylinder, Oval и ovalCylinder), и где находится его центр (x, y). Однако в моем цикле for я получаю сообщение об ошибке:

"Метод circle (Circle2) не определен для типа circleTester" Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Синтаксис foreach Синтаксис цикла:

for (T element : collection) {
  ... 
}

Что читается как "для каждого элемента T в коллекции". В вашем случае i уже имеет тип Circle2 и может быть передан непосредственно в метод showCenter.

for (Circle2 circle : circles) {
    showCenter(circle);
}

если вы хотите перебирать список, используя вместо этого индексы:

for (int i = 0; i < circles.size(); i ++) {
        showCenter(circles.get(i));
}

того же можно достичь с помощью Итератор , а также

for (Iterator<Circle2> i = circles.iterator(); i.hasNext(); )
      showCenter(i.next())
} 

, а с доступен новый метод forEach :

circles.forEach(cicle -> 
                  System.out.println(circle.getName() + "'s " + circle.getCenter()))

, который можно комбинировать с выражением labmda .

Последняя версия, возможно, предпочтительнее, если вы используете java8 +

0 голосов
/ 29 июня 2018

Используйте showCenter(i) вместо showCenter(circles(i)), поскольку i уже является объектом Circle2 типа

for (Circle2 circle : circles) {
    showCenter(circle);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...