分配:开发一个Java应用程序,它将输入每次旅行所用的里程数和加仑数(两者都是整数)。该程序应计算和显示每次旅行每加仑所获得的英里数,并打印到目前为止所有行程的每加仑总里程数。所有平均计算都应使用浮点结果。
见下面的实现。是的,这个类名很奇怪,但是我不想改变它。代码是否满足分配要求?我是否完全没有击中目标,如果是的话,我离目标有多远?
import java.util.Scanner;
public class MagicNumber
{
public static void main(String[] args)
{
float AvgMPG = 0;
int MilesDriven = 0;
int totalTrips = 0;
int GallonsUsed = 0;
int totalMilesPerGallon = 0;
int MilesPerGallon = 0;
Scanner input = new Scanner(System.in);
System.out.println("Enter Miles Driven or -1 to quit: ");
MilesDriven = input.nextInt();
System.out.println("Enter Gallons used to fill tank or -1 to quit: ");
GallonsUsed = input.nextInt();
while ( MilesDriven != -1)
{
MilesPerGallon = MilesDriven / GallonsUsed;
System.out.println("Miles Per Gallon for this trip: " +MilesPerGallon);
totalMilesPerGallon = MilesPerGallon + totalMilesPerGallon;
totalTrips = totalTrips + 1;
System.out.println("Enter Miles Driven or -1 to quit: ");
MilesDriven = input.nextInt();
System.out.println("Enter Gallons used to fill tank or -1 to quit: ");
GallonsUsed = input.nextInt();
}
if (totalTrips != 0)
{
System.out.println("Number of trips taken: "+ totalTrips);
AvgMPG = (float) totalMilesPerGallon / totalTrips;
System.out.println("Total Miles Per Gallon for all trips is :" +totalMilesPerGallon);
System.out.println("Average Miles Per Gallon Per Trip is :" +AvgMPG);
}
else
System.out.println("No data entered");
}
}发布于 2015-12-20 12:44:20
您需要做的一件事是有条不紊地测试代码。到目前为止,您只对代码进行了“工作”测试,但测试的目的是找出哪些代码不工作(按预期)。
这是你也可以交的,这是一个很好的做法,进入-你会需要它,如果你编程专业。随着代码的增长,您可能需要考虑将代码的用户界面与业务逻辑分开,以便可以使用测试程序单独测试它们。
对于小部分代码,测试计划对您的需求来说是“足够好”的。
逻辑测试-查看循环和分支条件,以确定哪些输入应该将它们带到每个分支。例如,您的UI说输入使用的-1加仑将退出-是吗?你的程序能得到零行程吗?它应该如何处理呢?
验证测试--您能否得到无效的输入,从而使您的代码做一些您没有预料到的事情?例如,在输入错误的情况下,division by zero是否有机会?如果用户输入可以生成异常,那么应该减轻它。
计算测试-当您混合数据类型时,您是否获得了适当的精度?(另一个答案指出了那个部门的一个缺陷。)如果手动计算,计算结果是否与您所期望的一样?您是否得到了正确的输出(例如,在每个循环中,规范都要求到目前为止的平均值)。
因为你的程序很简单,所以很容易测试好。但是,每次您发现一个bug时,不要认为它是一个孤立的问题--当您有一个bug时,它通常意味着您已经找到了一个bug类,您应该检查该bug是否出现在其他地方,它经常会出现。
查看代码中的变量:
totalTrips可能应该是trips,因为它只是一个计数器。totalMilesPerGallon刚刚被添加到,但是您正在添加一个平均值。要么你的命名是错误的,要么你的逻辑是错误的。这个类也可以使用比MagicNumber更有意义的名称,选择有意义的名称是一个明确的指示,表明您已经完全理解问题或需要您的代码试图解决。这也是一个方便的“红旗”,如果您不能轻易地想出一个名称,那么您可能需要在编写任何(更多)之前检查您是否理解了您希望您的代码做得更清楚。
考虑到代码重用,您真的需要列出两次的所有输入吗?还有其他方法可以对其进行编码以避免输入的重复吗?
最后,您可能需要再次检查您的格式,如果这是您遵循的约定,则您的大括号{...}应该匹配。大多数IDE都会为你这么做。
所有这些都会让您很好地处理所缺少的内容,以及您的代码目前如何改进。
发布于 2015-12-20 11:39:47
用于低效车辆的
Enter Miles Driven or -1 to quit:
12
Enter Gallons used to fill tank or -1 to quit:
31
Miles Per Gallon for this trip: 0嗯,我每加仑不到一英里,但肯定超过零。
这与规范相冲突:
所有平均计算都应使用浮点结果。
https://codereview.stackexchange.com/questions/114531
复制相似问题