Я работаю на уроках в Java и не смог полностью понять, что происходит на следующем уроке.For-Each Loop Alternative - Уточнение
Назначение: Цель этого урока - объяснить, как работает каждый цикл, создавая альтернативу, которая моделирует, как будет работать цикл for-each.
В предыдущем уроке, объяснение для-каждого цикла был прост:
import java.util.ArrayList //Imports ArrayList CLASS
public class ForEachLoops
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
//^Creates ArrayList object & calls constructor
for(int i = 1; i < 11; ++i)
numbers.add(i); //Just adding numbers 1-10 to the ArrayList.
for(int n : numbers) //For-Each Loop
System.out.println(n); //Returns value from each ArrayList element
}
}
В следующем занятии инструктор показывал, как создать альтернативный/симулятор петли для-каждой. Она работает следующим образом:
import java.util.ArrayList; //Importing ArrayList class from package
import java.util.Iterator; // Question 1 (See Below)
public class Chap16Part9
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
//^Creating object of ArrayList & calling constructor
for(int i = 1; i < 11; ++i)
numbers.add(i); //Just adding numbers 1-10 to ArrayList object
for(Iterator<Integer> n = numbers.iterator(); n.hasNext();) {
// ^Question 2 (See Below)
int num = n.next(); //Points to the next element to assign value.
System.out.println(num); //Prints current value of "num."
}
}
}
Вопрос 1: После прочтения документации Java, «Итератор» приведен в качестве интерфейса. Это все равно то же самое, что импортировать класс? Например, в документации Java «java.util.Scanner» считается классом, а не интерфейсом.
Вопрос 2: Прежде чем задать вопрос, цикл не нуждается в контроле типа «++ i», поскольку метод hasNext() Итератора проверяет, есть ли другой элемент для проверки. Если нет, то он останавливается. Это логическое значение. Однако в начале цикла переменная управления контуром (LCV) равна «Iterator<Integer> n = numbers.iterator();
», и я не совсем понимаю, что это означает. На мой взгляд, я вижу объект класса Итератора? устанавливается равным методу итератора ArrayList(). Может быть, потому, что данный «java.util.Interator»; рассматривается как интерфейс (в основном контракт, который объявляет методы, которые должны быть реализованы, если он реализуется классом), класс ArrayList завершает набор операторов заявленных методов iterator() в классе ArrayList и, следовательно, должен называться таким образом вместо конструктора, как называются традиционные классы (например, ArrayList)? Я немного смущен этим, и я надеюсь, что кто-то сможет пролить свет на это. Спасибо!
для «итератора п = numbers.iterator()» Я имел в виду, чтобы напечатать ".. Итератор n = numbers.iterator() " –
Во избежание проблем с' 'обрабатывается как тег HTML, который вместо показа интерпретируется всегда, обертывая фрагмент кода с помощью' \ ''. –
Pshemo
[Учебник для каждого] (https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html) объясняет это хорошо. –