import java.util.*;
class Shape{
void draw(){}
void erase(){}
}
class Circle extends Shape{
void draw(){
System.out.println( "Circle.draw() ");
}
void erase(){
System.out.println( "Circle.erase() ");
}
}
class Square extends Shape{
void draw(){
System.out.println( "Square.draw() ");
}
void erase(){
System.out.println( "Square.erase() ");
}
}
class Triangle extends Shape{
void draw(){
System.out.println( "Triangle.draw() ");
}
void erase(){
System.out.println( "Triangle.erase() ");
}
}
class RandomShapeGenerator{
private Random rand=new Random();
public Shape next(){
switch(rand.nextInt(3)){
default: //在去掉default:后将编译错误
case 0:return new Circle();
case 1:return new Square();
case 2:return new Triangle();
}
}
}
public class Shapes{
private static RandomShapeGenerator gen=new RandomShapeGenerator();
public static void main(String[] args){
Shape[] s=new Shape[9];
for(int i=0;i <s.length;i++){
s[i]=gen.next();
}
for(int i=0;i <s.length;i++){
s[i].draw();
}
}
}
各位能否告诉我为什么在switch那必须有default么?而且我把它放在case之后加上break也是出现同样的错误。
------解决方案--------------------
public Shape next()
这个方法需要返回一个Shape对象
如果你的switch没有default分支
那么在case判断完没有对应的rand.nextInt(3)值的时候没有对象返回,不符合这个方法的声明,所以会报错,提醒你这个方法可能没有返回Shape对象
------解决方案--------------------
up
------解决方案--------------------
next()方法必须要返回一个Shape对象