我是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
答案 0 :(得分:1)
我假设具有一定经验的典型Java开发人员会做这些事情:
double
(如果需要取整结果,则将int
更改为>>
kilomettersPerHour < 0
时引发异常; 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)
您可以使用varargs。 -它允许您删除很多代码。
您不需要加倍。
看看:
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
的类型,则可以使用该名称,但由于该名称会使抽象失败。我必须向内看才知道这意味着什么。