public static int sign(int n){

if(n > 0){
return 1;
}else if(n == 0){
return 0;
}else if(n < 0){
return -1;
}
}
为什么调用该方法时会有编译错误,而换成下面的就没有编译错误了,哪位大神能指点下
       public static int sign(int n){

if(n > 0){
return 1;
}else if(n == 0){
return 0;
}else {
return -1;
}
}

解决方案 »

  1.   

    public static int sign(int n){if(n > 0){
    return 1;
    }else if(n == 0){
    return 0;
    }else if(n < 0){
    return -1;
    }
    }
    因为你要是想上面这样写的话,有逻辑缺陷,有可能所有条件都不满足,导致没有返回值。而你的方法一定要有一个int的返回值
      

  2.   

    方法返回值要覆盖所有条件的情况都有返回值,所以要加个else 或者在条件外面加一个return 0;之类的,编译器没有那么智能,无法判断你的逻辑判断在没有else的情况下是否覆盖了100%的条件情况
      

  3.   

    第一
    这个方法确实是有编译问题,你可以你先利用Eclipse的提示功能,找到原因:
    Eclipse会提示你该方法没有返回一个int类型的值。原因是:输入参数n的值可能没法命中
     n >0
     n == 0
     n < 0
    这三个条件
    第二 正确的做法public static int sign(int n) {
    if (n > 0) {
    return 1;


    if (n == 0) {
    return 0;


        return -1;
    }
    这种写法比较清晰明了,没有那么多的else if语句。
      

  4.   


        public int sign(int n){
            return  n>0? 1:(n<0? -1:0);
        }
      

  5.   

    你换成if(n > 0){
    return 1;
    }else if(n == 0){
    return 0;
    }else {
    return -1;
    }
    }
    因为你这全是if 真  else 假有,有真就有假    有else if就有else,你没有else就表示还有一种结果没返回值,