import java.util.*;public class Test
{
    public int hello()
    {
Scanner scn = new Scanner(System.in);
int i = scn.nextInt();
switch(i)
{
    default:
    case 0:
return 0;
break;
    case 1:
return 1;
    case 2:
return 2;
}
    }
    public static void main(String[] args)
    {}
}
这段代码会报错,说是缺少返回语句,但是如果把case 0后面的break去掉,
程序就可以正确运行,请问大家为什么呢?

解决方案 »

  1.   

    应该不是缺少返回语句吧?
    你那break是不管在什么情况下都不会执行到的(都return了)
    你那break是不可达的
      

  2.   

    return了就不会继续执行break了
      

  3.   

    缺少返回语句???
    应该报 break; 执行不到吧应该是个warning才对程序这样写 break;执行不到的吧
    每次都直接return了
      

  4.   

    在default:加一个return 就可以拉,这里的break没有用
      

  5.   

    居然你要这样写,你就不用break了或者写成
    int k=0;
    switch(i) 

        case 0: 
          k=0;
          break; 
        case 1: 
          k=1;
          break; 
        case 2: 
          k=2;
          break;
        default:
          k=0;
          break; 

    return k;
      

  6.   

    应该是beak语句不会达到执行,去掉break就没有问题了
      

  7.   

    函数hello()要求有个返回值int,如果你把return 0,去掉,就又不行了。
      

  8.   

    无论什么情况,把default放到最后都是明智的,你这个逻辑连自己都没理清楚,还怎么期望编译器按你的意思去编译。
      

  9.   

    首先程序无论如何都会进入default:分支,分支为空,于是判断i是否为0,这时,如果i不是0,那么switch就退出了,而switch后面也没有return,所以函数没有遇到任何return语句。
    你这个逻辑连自己都没理清楚,还怎么期望编译器按你的意思去编译???
    忠告是:无论什么情况下,把default放到最后都是明智的。
      

  10.   

    要执行break之前已经return返回了,break永远不会被执行到,所以会报错
      

  11.   

    import java.util.*; public class Test 

        public int hello() 
        { 
    Scanner scn = new Scanner(System.in); 
    int i = scn.nextInt(); 
    int k;
    switch(i) 

          
         case 0: 
    k=0; 
    break;
            case 1: 
      k=1; 
            case 2: 
    k=2; 
    default:
    k=0;
      } 
      return k;
        } 
        public static void main(String[] args) {
        
        } 
      

  12.   

    import java.util.*; public class Test 

        public int hello() 
        { 
    Scanner scn = new Scanner(System.in); 
    int i = scn.nextInt(); 
    switch(i) 

        default: 
        case 0: 
    return 0; //如果i == 1 或是 2,则程序流程会碰到break语句结束,自然就缺少返回值了!break; 
        case 1: 
    return 1; 
        case 2: 
    return 2; 

        } 
        public static void main(String[] args) 
        {}