此代码部分来自我的年度燃料使用类的主要方法。该计划预测我的年度燃料使用至少三个加油我的汽车。在这里,我计算的最大和最小的距离(这是英里旅行),MPG,和价格每加仑。我想做个全面的回顾。
//initialization of array of objects
AnnualFuelUse[] fillUps = {new AnnualFuelUse (1, 1, 6500, 6800, 9.70, 3.11),
new AnnualFuelUse (2, 10, 6800, 7052, 8.10, 3.08),
new AnnualFuelUse (3, 20, 7052, 7349, 9.20, 3.15)};
//calculate Min and Max for distance, MPG, and price per gallon
double minDist = 0, maxDist = 0;
double minMPG = 0.0, maxMPG = 0.0, minPrice = 0.0, maxPrice = 0.0;
Double dMin = Double.MAX_VALUE;
Double dMax = Double.MIN_VALUE;
Double mpgMin = Double.MAX_VALUE;
Double mpgMax = Double.MIN_VALUE;
Double priceMin = Double.MAX_VALUE;
Double priceMax = Double.MIN_VALUE;
for (int i = 0; i < fillUps.length; i++) {
if (fillUps[i].getDist() < dMin){
dMin = fillUps[i].getDist();
minDist = dMin;
}
if (fillUps[i].getDist() > dMax) {
dMax = fillUps[i].getDist();
maxDist = dMax;
}
if (fillUps[i].getMilesPerGallon() < mpgMin) {
mpgMin = fillUps[i].getMilesPerGallon();
minMPG = mpgMin;
}
if (fillUps[i].getMilesPerGallon() > mpgMax) {
mpgMax = fillUps[i].getMilesPerGallon();
maxMPG = mpgMax;
}
if (fillUps[i].getPrice() < priceMin) {
priceMin = fillUps[i].getPrice();
minPrice = priceMin;
}
if (fillUps[i].getPrice() > priceMax) {
priceMax = fillUps[i].getPrice();
maxPrice = priceMax;
}
}发布于 2013-11-19 01:12:19
您的每个if-语句都可以简化。
if (fillUps[i].getDist() > dMin){
dMin = fillUps[i].getDist();
minDist = dMin;
}首先,因为您同时修改了两个变量,所以可以将它写在同一行上。
if (fillUps[i].getDist() > dMin){
minDist = dMin = fillUps[i].getDist();
}但是,这表明您可能有太多的变量,因为minDist与dMin相同。我将保留原语类型double的变量,并去掉非原始变量。因为Double.MAX_VALUE和Double.MIN_VALUE是一个常规的double,所以我不认为需要Double类型。只需确保正确地初始化min/max变量(Double.MIN_VALUE或Double.MAX_VALUE)。
然后,您要做的是始终得到两个值的最小值,因此可以使用Math.min方法来简化。
minDist = Math.min(fillUps[i].getDist(), minDist);因此,您的四行if语句段中的每一行都可以成为一行!
for (int i = 0; i < fillUps.length; i++) {
minDist = Math.min(fillUps[i].getDist(), minDist);
maxDist = Math.max(fillUps[i].getDist(), maxDist);
minMPG = Math.min(fillUps[i].getMilesPerGallon(), minMPG);
maxMPG = Math.max(fillUps[i].getMilesPerGallon(), maxMPG);
minPrice = Math.min(fillUps[i].getPrice(), minPrice);
maxPrice = Math.max(fillUps[i].getPrice(), maxPrice);
}发布于 2013-11-19 00:44:54
该代码违反了告诉我,别问:
程序代码获取信息,然后作出决定。面向对象的代码告诉对象做一些事情。~Alec Sharp
在我们讨论这个问题之前,请考虑:
fillUps[i].getDist() > dMin可以写:
fillUps[i].canTravel( dMin )同样:
fillUps[i].getPrice() > priceMax可以写:
fillUps[i].priceExceeds( priceMax );重要的问题仍然没有答案:为什么代码要检查距离和价格?如果你想要做的就是确定一个给定的储气罐要花多少钱,那就写:
float maxDistance = fillUps[i].calculateDistance();如果您想知道填充剩余油箱的价格,请写:
float price = fillUps[i].calculateFillPrice();将使用变量的代码移到具有变量的类中。
您也可以比较对象,而不是内部变量。例如:
AnnualFuelUse fillUps[] // ...
AnnualFuelUse minPriceFillUp;
for (int i = 0; i < fillUps.length; i++) {
if( fillUps[i].exceedsPrice( fillUps[i-1] ) ) {
maxPriceFillUp = fillUps[i];
}
if( fillUps[i].exceedsDistance( fillUps[i-1] ) ) {
maxDistanceFillUp = fillUps[i];
}
// ...
}在循环结束时,将有包含所需信息的对象。使用这些对象,您可以要求它们执行特定的任务。然后使get访问器方法private。
https://codereview.stackexchange.com/questions/35647
复制相似问题