以下代码不起作用。这段代码出了什么问题?编译器在for循环中抱怨NumberList
不是Iterable
类。
每个循环可以使用哪种类?如何使NumberList
可迭代?我尝试制作NumberList implement Iterable
,但它似乎不起作用,因为我不知道如何正确定义迭代器。
如果有人可以演示如何使这段代码有效,或者将我链接到一个很棒的教程。
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);
}
}
}
答案 0 :(得分:4)
NumberList没有实现Iterable。就编译器而言,它只涉及任何其他类。
你需要做这样的事情
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();
}
}
答案 1 :(得分:3)
您的班级NumberList
需要实施Iterable界面:
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);
}
}
}
答案 2 :(得分:0)
您需要implement Iterable interface。在这种情况下,这只意味着您需要向Iterator<T> iterator()
类添加方法NumberList
。由于您的列表在这种情况下仅包含数字,因此泛型类型参数T
仅为Number
。