Как я могу использовать для каждого цикла, чтобы напечатать Arraylist различных объектов разных классов - PullRequest
0 голосов
/ 21 мая 2018
class Main
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        Loan loan = new Loan();
        Date date = new Date();
        Strings strings = new Strings();
        Frame frame = new Frame();
        Circle circle = new Circle();

        ArrayList<Object> mylist = new ArrayList<Object>();
        mylist.add(loan);
        mylist.add(date);
        mylist.add(strings);
        mylist.add(frame);
        mylist.add(circle);

        for (Object i : mylist)
        {
            System.out.println(mylist.get(i));
        }
         /*
         //this method is working fine
         System.out.println(mylist.get(0));
         System.out.println(mylist.get(1));
         System.out.println(mylist.get(2));
         System.out.println(mylist.get(3));
         System.out.println(mylist.get(4));

         //this method is also working fine
         for (int i = 0; i < 4; i++)
         {
            System.out.println(mylist.get(i));
         }*/

    }
}

Мой Arraylist относится к разным типам объектов, и у всех есть поля со значениями и метод toString в каждом классе (так что печать возможна) ..... Если я не использую цикл и еслиЯ использую итеративный цикл, он работает нормально, но я хочу использовать для каждого цикла, я использовал вышеуказанный синтаксис, но он показывает ошибки.

Ответы [ 3 ]

0 голосов
/ 21 мая 2018
myList.forEach(System.out::println); 

и не объявляйте myList как ArrayList, но только как List - предпочитайте объявлять переменные как интерфейсы, когда они доступны

0 голосов
/ 21 мая 2018

Здесь:

for (Object i : mylist)
{
    System.out.println(mylist.get(i)); 
                                  ^----- error here
}

Вы вызываете myList.get() с переменной Object в качестве аргумента.
Это недопустимо во время компиляции, так как ArrayList.get() принимает int в качестве параметра:

E java.util.ArrayList.get(int index)

Каким-то образом вы смешиваете foreach и синтаксис "basic for".
Оператор "basic for" требует использованияиндекс:

for (int i=0; i<mylist.size(); i++) {
     System.out.println(myList.get(i)); 
}

Но синтаксис foreach упрощает это:

for (Object i : mylist) {
     System.out.println(i); 
}
0 голосов
/ 21 мая 2018

Изменить

    for (Object i : mylist)
    {
        System.out.println(mylist.get(i));
    }

на

    for (Object i : mylist)
    {
        System.out.println(i);
    }

i в foreach цикле является сам объектне указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...