Java 迭代数据而不保存它
我想写一个简单的程序,可以为我提供打印n个偶数从一些firstNumber开始的功能。它的数字是totalNumber。我不想保存它们,只是打印出来。这是我的一段代码:Java 迭代数据而不保存它,java,iterator,Java,Iterator,我想写一个简单的程序,可以为我提供打印n个偶数从一些firstNumber开始的功能。它的数字是totalNumber。我不想保存它们,只是打印出来。这是我的一段代码: import java.util.Iterator; public class EvenNumbers implements Iterable<Integer>{ private int firstNumber; private int totalNumbers; public Even
import java.util.Iterator;
public class EvenNumbers implements Iterable<Integer>{
private int firstNumber;
private int totalNumbers;
public EvenNumbers(int firstNumber, int totalNumbers) {
this.firstNumber = firstNumber;
this.totalNumbers = totalNumbers;
}
@Override
public Iterator<Integer> iterator() {
return new myNewIterator();
}
private static class myNewIterator implements Iterator<Integer>{
private int firstNumber;
private int totalNumbers;
private int tmp;
public myNewIterator() {
this.firstNumber = firstNumber;
this.totalNumbers = totalNumbers;
this.tmp = firstNumber - 2;
}
@Override
public boolean hasNext() {
if(totalNumbers > 0){
totalNumbers--;
return true;
}
return false;
}
@Override
public Integer next() {
return tmp + 2;
}
}
}
正如你可能看到的,我没有得到这个程序的任何输出。
有人能解释一下我做错了什么吗?
非常感谢 为什么有这么多代码
public class Main {
public static void main(String[] args) {
int start = 14;
int count = 4;
for (int n = start; n < start + 2 * count; n += 2) {
System.out.println(n);
}
}
}
公共类主{
公共静态void main(字符串[]args){
int start=14;
整数计数=4;
对于(int n=start;n@fafl是一个更好、更简洁的答案
指出此代码不起作用的原因:
1。问题在于myNewIterator构造函数。您正在为变量本身赋值。另外,int的默认值为零,迭代条件if(totalNumbers>0)将始终失败
public myNewIterator() {
/** these two lines have to be changed**/
this.firstNumber = firstNumber;
this.totalNumbers = totalNumbers;
/** end **/
this.tmp = firstNumber - 2;
}
您必须从构造函数中获取这两个值。下面是正确的代码。我还更正了构造函数的名称
2。在hasNext()方法中不能递减totalNumbers,因为假设只有一个next元素,如果我调用hasNext()100次而没有调用next(),它仍应返回true,即它有next元素。因此,在调用next()时应该发生递减
3。必须为下一次()调用更新tmp
这些更改也反映在以下代码中
import java.util.Iterator;
public class EvenNumbers implements Iterable<Integer>{
private int firstNumber;
private int totalNumbers;
public EvenNumbers(int firstNumber, int totalNumbers) {
this.firstNumber = firstNumber;
this.totalNumbers = totalNumbers;
}
@Override
public Iterator<Integer> iterator() {
/***** changed *****/
return new myNewIterator(this.firstNumber,this.totalNumbers);
}
private static class myNewIterator implements Iterator<Integer>{
private int firstNumber;
private int totalNumbers;
private int tmp;
/***** changed *****/
public myNewIterator(int firstNo,int totalNo) {
/***** changed *****/
/**** edited these lines *******/
this.firstNumber = firstNo;
this.totalNumbers = totalNo;
/***** ****/
this.tmp = firstNumber - 2;
}
@Override
public boolean hasNext() {
if(totalNumbers > 0){
/***** changed *****/
//totalNumbers--; //commenting this line as repeated calls of this line makes this call unsafe
return true;
}
return false;
}
@Override
public Integer next() {
/***** changed *****/
totalNumbers--;
tmp = tmp + 2
return tmp;
}
}
}
import java.util.Iterator;
公共类偶数实现了Iterable{
私人int firstNumber;
私人整数;
公共偶数(整数firstNumber、整数TotalNumber){
this.firstNumber=firstNumber;
this.totalNumbers=totalNumbers;
}
@凌驾
公共迭代器迭代器(){
/*****已更改******/
返回新的myNewIterator(this.firstNumber,this.TotalNumber);
}
私有静态类myNewIterator实现了迭代器{
私人int firstNumber;
私人整数;
私有int tmp;
/*****已更改******/
公共myNewIterator(int firstNo,int totalNo){
/*****改变*****/
/****编辑了这些行*******/
this.firstNumber=firstNo;
this.totalNumbers=totalNo;
/***** ****/
this.tmp=firstNumber-2;
}
@凌驾
公共布尔hasNext(){
如果(总数>0){
/*****已更改******/
//totalNumbers--;//将此行注释为该行的重复调用会使该调用不安全
返回true;
}
返回false;
}
@凌驾
公共整数next(){
/*****已更改******/
总数--;
tmp=tmp+2
返回tmp;
}
}
}
“公共mojNoviIterator()”???这是代码编译。请更正代码编译了吗?似乎OP正在做一个关于迭代器的练习,而您的解决方案在这方面并没有提供太多帮助。请修改答案,使其提供迭代器
import java.util.Iterator;
public class EvenNumbers implements Iterable<Integer>{
private int firstNumber;
private int totalNumbers;
public EvenNumbers(int firstNumber, int totalNumbers) {
this.firstNumber = firstNumber;
this.totalNumbers = totalNumbers;
}
@Override
public Iterator<Integer> iterator() {
/***** changed *****/
return new myNewIterator(this.firstNumber,this.totalNumbers);
}
private static class myNewIterator implements Iterator<Integer>{
private int firstNumber;
private int totalNumbers;
private int tmp;
/***** changed *****/
public myNewIterator(int firstNo,int totalNo) {
/***** changed *****/
/**** edited these lines *******/
this.firstNumber = firstNo;
this.totalNumbers = totalNo;
/***** ****/
this.tmp = firstNumber - 2;
}
@Override
public boolean hasNext() {
if(totalNumbers > 0){
/***** changed *****/
//totalNumbers--; //commenting this line as repeated calls of this line makes this call unsafe
return true;
}
return false;
}
@Override
public Integer next() {
/***** changed *****/
totalNumbers--;
tmp = tmp + 2
return tmp;
}
}
}