有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java平均速度计算返回“无穷大”

在我的安卓 google map应用程序中,我试图通过计算时间(以毫秒为单位)和距离(以米为单位)来计算平均速度,并对其执行下一次计算:

private double avgSpeed = 0;
public void calcAvgSpeed(double distance, long time) {
    distance = distance / 1000;      //1000 = km
    time = time / 3600000;           // 1000 = sec, 60000 = min, 3600000 = hrs
    avgSpeed = (double) (distance / time);
}

为了确保它能工作,我用calcAvgSpeed(300, 30000);运行了它,其中300是300米,30000是30000毫秒(或30秒)。我做的计算表明,采用这种方法后,平均速度应该是36。但当我打印结果时,它会说“无穷大”,就像我除以零一样

有人知道我的方法是不是错了,或者为什么我会得到这个奇怪的答案吗


共 (3) 个答案

  1. # 1 楼答案

    改变

    public void calcAvgSpeed(double distance, long time) {
    

    public void calcAvgSpeed(double distance, double time) {
    

    因为long是一个整数,如果你把long除以3600000,你会得到0(因为它四舍五入到整数部分)
    这里你可以得到一个0的除法:

    avgSpeed = (double) (distance / time);
    

    这是无限的

  2. # 2 楼答案

    你需要除以零

    time = time / 3600000;
    

    执行整数除法,因为time属于long类型

    要解决这个问题,请使用

    avgSpeed = distance * 3600000 / time;
    
  3. # 3 楼答案

    你可以从这个LINK的公式中使用:

    /**
     *
     * @Author: Aghatise Osazuwa
     * Website: www.cscprogrammingtutorials.com
     *
     * Exercise 1.10 - Average Speed In Miles
     *
     */
    
    public class Ex1_10 {
      public static void main(String[] args) {
        System.out.println("Distance = 14km \nTime = 45 minutes 30 seconds = (45 x 60) + 30 \n"
        + "                                       hours \n"
        + "                                    3600            \n"
        + "1 mile = 1.6 kilometers. \nAverage Speed in miles per hour = "
        + (14.0 / 1.6)/ (((45.0 * 60.0) + 30.0) / 3600) + " mph.");
      }
    }
    

    enter image description here

    或者你可以使用:

        km * 3600
               =  Average time kmh
       millisecond