不是造型转换的问题 其实你仔细看看是你的程序缺少返回值
假如 x即不等与0 也不大于0,也不小于0的话,(虽然x肯定符合其中一个,但是语法就不完整编译是过不去的)程序就没有返回值了
修改如下
static short floor(float x)
   {
    if(x==0)
    return 0;
   
    if(x>0)
    return (short)x;
   
    if(x<0)
    return (short)(x-1);
         return 0;
   }

解决方案 »

  1.   

    import java.util.*;
    public class A 
    {
       public static void main(String[] args)
       {
        Random random=new Random();
       
        float temp=random.nextFloat();
             float x=100*temp;
             float y=-100*temp;
       
        System.out.println("x="+x+"  "+"y="+y);
        System.out.println(A.floor(x)+"  "+A.floor(y));
        System.out.print(Math.floor(x)+"  "+Math.floor(y));
       }
       
       static short floor(float x)
       {
        if(x==0)
        return 0;
       
        if(x>0)
        return (short)x;     return (short)(x-1);//must be x<0
       }
    }
      

  2.   

    你得到的编译错误是不是:
         "TestTypeCvt.java": missing return statement at line 21, column 32     大意是: 在floor()方法中遗漏了返回声明。
         注意!!!这里并不是说你没有指明返回类型,如果你写成 static floor(){}; ,这就是没有指明返回类型,这样你得到的编译错误应该是
         "TestTypeCvt.java": invalid method declaration; return type required at line 21, column 12     这个返回声明是指你的函数体内的return语句。不信你可以去掉方法中所有语句,写一个空方法,你会得到同样的错误。 那你这个函数体内又确实有返回语句啊,不但有还有3句之多,为什么会得到这样的提示呢?我猜想编译器这么认为:根据你的函数体内的语句(if分支),有可能三个IF全不成立,这样语句流程就会到达函数尾,而之前没有执行一句return。也就说,有这个遗漏返回的可能,所以它就报错了。你可以试着将最后一个if语句改用else代替,这样根据流程走,就必然会在函数结束之前遇上一个return语句,编译器也就乖乖的放行了。    BTW,事实上,在这里你的强制转型是没有问题的。这是我将最后一个分支改成else后的一次运行结果:x=33.360203  y=-33.36020333  -3433.0  -34.0我的开发环境是jdk1.4.1 + jb9
      

  3.   

    ngqzmjmj(冷酷) 说的对,缺少返回值,如果x不等于0,也不大于0的话,必然是小于0的。但是如果你把三种情况都写出来的话,你还必须要要写上这三种情况以外的返回值(虽然逻辑上不可能出现第四种情况,但是编译器并不知道有几种情况,所以会编译出错的)
    所以呢,在最后还是要加上一句三种情况以外的返回值,比如:return 0;
      

  4.   

    这样就ok了:
           if(x==0)
        return 0;
       
           if(x>0)
        return (short)x; 
            
            else
             return (short)(x-1);