求教Java编程思想里面的一题,怎么也找不到错误在哪!
这是书上第11章持有对象里面的练习31题
(3)修改RandomShapeGenerator.java,使其成为一个Iterable。
这是LZ写的代码:
报错如下:

在下面是答案上的代码
好吧,撸主不明白的地方有两处:
一、为什么实现Iterable接口的类不用在类中实现hasNext()、next()、remove()的定义,
然而在内部类里实现后却能够运行?
二、撸主检查了一遍又一遍实在是找不到自己写的代码到底哪里出了错,我感觉明明就跟答案里的一样啊?
跪求大神指点啊!!!
(3)修改RandomShapeGenerator.java,使其成为一个Iterable。
这是LZ写的代码:
public class RandomShapeIterable implements Iterator<Shape> {
private Random rand = new Random(27);
private final int generateShapeNum;
public RandomShapeIterable( int generateShapeNum ) {
this.generateShapeNum = generateShapeNum;
}
public Iterator<Shape> iterator() {
return new Iterator<Shape>() {
private int num = 0;
public boolean hasNext() {
return num < generateShapeNum;
}
public Shape next() {
num++;
switch(rand.nextInt(3)) {
default:
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args) {
for (Shape s : new RandomShapeIterable(10)) {
s.draw();
s.erase();
}
}
}
报错如下:

在下面是答案上的代码
class RandomShapeGenerator implements Iterable<Shape> {
private Random rand = new Random(47);
private final int quantity;
RandomShapeGenerator(int quantity) {
this.quantity = quantity;
}
public Iterator<Shape> iterator() {
return new Iterator<Shape>() {
private int count;
public boolean hasNext() {
return count < quantity;
}
public Shape next() {
++count;
return nextShape();
}
public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}
private Shape nextShape() {
switch (rand.nextInt(3)) {
default:
case 0:
return new Circle();
case 1:
return new Square();
case 2:
return new Triangle();
}
}
}
public class E31_IterableRandomShapeGenerator {
public static void main(String[] args) {
RandomShapeGenerator rsg = new RandomShapeGenerator(10);
for (Shape shape : rsg)
System.out.println(shape.getClass().getSimpleName());
}
}
好吧,撸主不明白的地方有两处:
一、为什么实现Iterable接口的类不用在类中实现hasNext()、next()、remove()的定义,
然而在内部类里实现后却能够运行?
二、撸主检查了一遍又一遍实在是找不到自己写的代码到底哪里出了错,我感觉明明就跟答案里的一样啊?
跪求大神指点啊!!!
...全文
相关推荐
错误:找不到或者无法加载主类
解决“找不到或无法加载主类”错误解决“找不到或无法加载主类”错误的方法很简单:1. 首先,检查 Java 环境变量是否正确配置。
Maven 错误找不到符号的解决方法
Maven 错误找不到符号的解决方法Maven 错误找不到符号是 Maven 项目中经常出现的一种错误,主要是由于项目编码格式不统一、项目编码使用的 JDK 版本不统一、Pom 依赖问题等原因引起的。
Java找不到或无法加载主类及编码错误问题的解决方案
在进行Java程序开发时,我们经常会遇到两个常见的问题:一个是"找不到或无法加载主类",另一个是编码错误。下面,我们就来详细讲解这两个问题的产生原因以及如何进行解决。
IDEA 错误之找不到或无法加载主类的问题
在使用IntelliJ IDEA(IDEA)开发Java项目时,可能会遇到“找不到或无法加载主类”的错误。这个错误通常表明IDEA无法正确地识别和执行程序的入口点,即主类。
cmd中java命令出现找不到主类的错误处理
### 关于CMD中Java命令出现“找不到主类”的错误处理#### 一、问题概述在使用命令提示符(cmd)执行Java程序时,有时会遇到“找不到或无法加载主类”这样的错误信息。


Java SE
