为什么Bike2.getTime()返回0而不是正确的整数值?

  • 本文关键字:整数 Bike2 getTime 返回 java
  • 更新时间 :
  • 英文 :


嘿,伙计们,我正在学习java,我写了这个简单的代码,我找不到任何错误。我找不到自行车了。感谢阅读

public class ConstructorEx3 {
        int Speed;
        int Distance;
        int Minute;
        public int getTime (){
            return  ((Distance/Speed)*Minute);  
        }
        ConstructorEx3 (){
            Distance = 60;
            Speed    = 30;
            Minute   = 60;
        }
        ConstructorEx3 (int D, int S, int M){
            Distance = D;
            Speed    = S;
            Minute   = M;
        }
        public static void main (String []arsh){
            ConstructorEx3 Bike1,Bike2;
            Bike1 = new ConstructorEx3();
            Bike2 = new ConstructorEx3(40,80,60);
        System.out.println("Bike one is travelling at : "+ Bike1.getTime());
        System.out.println("Bike two is travelling at : "+ Bike2.getTime());
        }
}

因为它的整数运算(40/80)*60会得到0。请注意,在整数计算中40/80将是0而不是0.5,您需要在程序中使用double值而不是int来获得确切的答案(对于您的特定情况)。

关于约定的一些建议

  • 为您的类选择有意义的名称,描述它的目的,如TimeCalculator, Bike
  • 以小写字母distance而非Distance开始变量名
  • 同样,实例变量名也应该以小写字母bike1开头,而不是Bike1
  • 最好在构造函数中使用this.distance而不是Distance = D
Distance = 40;
Speed = 80;
Minute - 60;
Distance / Speed = 0.5;

由于您正在使用int,因此.5是级联的。最后得到0 * Minute = 0 * 60 = 0;

最好的方法是将值转换为double,然后再转换回来。请注意,当处理双精度到整型的转换时,它是有损的,因为你不会得到准确的结果。

看看我如何在getTime()方法中解决您的问题:

public class ConstructorEx3 {
        int Speed;
        int Distance;
        int Minute;
        public int getTime (){
            double v = ((double)Distance/(double)Speed);
            v= v * (double)Minute;
            return (int)v;
//          return  ((Distance/Speed)*Minute);    
        }
        ConstructorEx3 (){
            Distance = 60;
            Speed    = 30;
            Minute   = 60;
        }
        ConstructorEx3 (int D, int S, int M){
            Distance = D;
            Speed    = S;
            Minute   = M;
        }
        public static void main (String []arsh){
            ConstructorEx3 Bike1,Bike2;
            Bike1 = new ConstructorEx3();
            Bike2 = new ConstructorEx3(40,80,60);
        System.out.println("Bike one is travelling at : "+ Bike1.getTime());
        System.out.println("Bike two is travelling at : "+ Bike2.getTime());
        }
}
输出:

Bike one is travelling at : 120 
Bike two is travelling at : 30

最新更新