For-each loop can only iterate through an array or an instance of java.lang.Iterable

The following code does not work. What is wrong with this code? The compiler complains in a for loop that NumberList not an Iterable class.

Which class can be used for each cycle? How to make NumberList iterable? I tried to make NumberList implement Iterable , but it does not work, because I do not know how to correctly determine Iterator.

If someone can demonstrate how to make this code work, or link me to a tutorial, that would be great.

 public class Test{ public class NumberList{ private int numItems; private Number[] numbers; public NumberList(int size){ this.numbers = new Number[size]; this.numItems=0; } public void add(Number n){ this.numbers[this.numItems++]=n; } } public void printPairs() { ArrayList<Integer> num=new ArrayList<Integer>(); NumberList numbers = new NumberList(50); numbers.add(4); numbers.add(5); numbers.add(6); for(Number n1: numbers){ System.out.println(n1); } } } 
+4
source share
3 answers

NumberList does not implement Iterable. As for the compiler, this applies only to any other class.

You need to do something like this

 public class NumberList implements Iterable<Number> { private int numItems; private Number[] numbers; public NumberList(int size) { this.numbers = new Number[size]; this.numItems = 0; } public void add(Number n) { this.numbers[this.numItems++] = n; } @Override public Iterator<Number> iterator() { return Arrays.asList(numbers).subList(0, numItems).iterator(); } } 
+4
source

In your NumberList class, NumberList need to implement the Iterable interface:

 import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; public class Test { public class NumberList implements Iterable<Number> { private int numItems; private Number[] numbers; public NumberList(int size) { this.numbers = new Number[size]; this.numItems = 0; } public void add(Number n) { this.numbers[this.numItems++] = n; } @Override public Iterator<Number> iterator() { return Arrays.asList(numbers).iterator(); } } public void printPairs() { ArrayList<Integer> num = new ArrayList<Integer>(); NumberList numbers = new NumberList(50); numbers.add(4); numbers.add(5); numbers.add(6); for (Number n1 : numbers) { System.out.println(n1); } } } 
+3
source

You need to implement Iterable interface . In this case, it simply means that you need to add the Iterator<T> iterator() method to the NumberList class. Since in this case your list contains only numbers, the parameter of type type T is Number .

0
source

Source: https://habr.com/ru/post/1498869/


All Articles