public static Instrument next(){
private Random rand = new Random();
 switch(rand.nextInt(5)){
  case 0: return new Wind();
case 1: return new Percussion();
case 2: return new Stringed();
case 3: return new Brass();
      case 4: return new Woodwind();
}
}
其中instrument 是基类,其他类都是它的子类!
请问一下为什么编译会出错,它显示没有返回值!
这样就可以了,为什么?
public static Instrument next(){
private Random rand = new Random();
 switch(rand.nextInt(5)){
                            default:
  case 0: return new Wind();
case 1: return new Percussion();
case 2: return new Stringed();
case 3: return new Brass();
      case 4: return new Woodwind();
}
}

解决方案 »

  1.   

    有switch就最好有default,
    而且是rand运算,编译器不会根据实际运算结果(0-5),而取消default的处理情况
      

  2.   

    555555555什么意思?
    我把switch里面的参数改成2也会出错!
      

  3.   

    default,确实是需要的,养成良好的编程习惯吧
      

  4.   

    default:是放在前面?
    还有为什么break也没有!?
      

  5.   

    你的代码能通过编译才怪呢. 方法体中允许定义private修饰的变量? 这是一个问题. 另一个原因不是一目了然吗?在你的switch结构中, 编译器不可能确定一定有一个case分支会被执行, 也就不可能确定该函数一定会返回一个Instrument.而第二段代码中, 因为一开始就是default:, 而你又没有加break;语句, 所以后面的所有代码都有机会被执行. 但是遇到第一个return的时候, 函数就返回了, 所以第二段代码永远都是返回new Wind().
      

  6.   

    如果没写default:,则值为0、1、2、3、4以外的话无返回值;
    照你写的那样加的default:,则值不为0、1、2、3、4时返回了new Wind();就不错了。