有什么方法可以更轻松地做到这一点?

时间:2019-10-03 08:26:39

标签: java

我是Java新手,我从udemy学习。 我的问题是...在学习Java结束时,我会发现有n种更好的方法可以做同样的事情? (我只是想加快学习过程) 如果有人可以给我提供一种更好的方法的示例,以便我理解,那是我的代码。谢谢!!

public static void main(String[] args) {
        toMillesPerHour(50);
        toMillesPerHour(90);
        toMillesPerHour(100);
        toMillesPerHour(130);
        toMillesPerHour(-20);
    }
    public static void toMillesPerHour(double kilomettersPerHour) {
        //return round value
        if(kilomettersPerHour >= 0) {
            kilomettersPerHour = (int) kilomettersPerHour / 1.60934;
            int roundKm = (int) kilomettersPerHour;
            System.out.println("You travel with speed of: " + roundKm +" Miles");
        }else {
            System.out.println("Negative value detected");
        }
    }
You travel with speed of: 31 Miles
You travel with speed of: 55 Miles
You travel with speed of: 62 Miles
You travel with speed of: 80 Miles
Negative value detected

6 个答案:

答案 0 :(得分:1)

我假设具有一定经验的典型Java开发人员会做这些事情:

  1. 将返回类型更改为double(如果需要取整结果,则将int更改为>
  2. kilomettersPerHour < 0时引发异常;
  3. main中打印结果。

例如,

public static double toMillesPerHour(double kilomettersPerHour) {
    if (kilomettersPerHour < 0) {
        throw new IllegalArgumentException("Negative value detected");
    }

    return kilomettersPerHour / 1.60934;
}

答案 1 :(得分:1)

您可以建议更改steven35,但是在您的toMilesPerHour方法中,您不应该使用参数变量来存储除法结果。相反,您应该执行以下操作:

int milesPerHour = (int)kilometersPerHour / 1.60934

这样,您无需进行任何其他变量即可舍入结果。同样,修改参数变量也是一个坏习惯。

答案 2 :(得分:1)

  1. 您可以使用varargs。 -它允许您删除很多代码。

  2. 您不需要加倍。

  3. 将参数用作局部变量不是一种好方法。

看看:

class Printer {
    public static void main(String[] args) {
        toMillesPerHour(50, 90, 100, 130, -20);
    }

    public static void toMillesPerHour(int... kilomettersPerHour) {
        Arrays.stream(kilomettersPerHour).forEach(Printer::printRound);
        //return round value
    }

    private static void printRound(int kmPerHour) {
        String message = (kmPerHour >= 0) ? calculate(kmPerHour) : "Negative value detected";
        System.out.println(message);
    }

    private static String calculate(int kmPerHour) {
        int roundKm = (int) (kmPerHour / 1.60934);
        return "You travel with speed of: " + roundKm + " Miles";
    }
}

答案 3 :(得分:0)

您可以只在数组中定义值并对其进行迭代。然后,每次添加新值时,都不必再次调用toMillesPerHour()

double[] values = { 50.0, 90.0, 100.0, 130.0, -20.0 };
for (double value : values) {
    toMillesPerHour(value);
}

答案 4 :(得分:0)

您可以使用Math.round()获得更准确的结果。

public static void main(String[] args) {
    toMillesPerHour(50);
    toMillesPerHour(90);
    toMillesPerHour(100);
    toMillesPerHour(130);
    toMillesPerHour(-20);
}
public static void toMillesPerHour(double kilomettersPerHour) {
    //return round value
    if(kilomettersPerHour >= 0) {
        kilomettersPerHour = kilomettersPerHour / 1.60934;
        int roundKm = (int) Math.round( kilomettersPerHour );            
        System.out.println("You travel with speed of: " + roundKm +" Miles");
    }else {
        System.out.println("Negative value detected");
    }
}

答案 5 :(得分:0)

此代码最大的问题是名称toMilesPerHour(50);仅说明了一半。 50什么?不要让我向内看就知道了。

不确信?好的,现在我需要一种将英尺每秒转换为英里每小时的方法。我应该给它起什么名字,以免引起混乱?

如果您的方法挂起了名为KilometersPerHour的类型,则可以使用该名称,但由于该名称会使抽象失败。我必须向内看才知道这意味着什么。