首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算每加仑总里程和每次旅行平均里程

计算每加仑总里程和每次旅行平均里程
EN

Code Review用户
提问于 2015-12-20 11:15:41
回答 2查看 9.7K关注 0票数 4

分配:开发一个Java应用程序,它将输入每次旅行所用的里程数和加仑数(两者都是整数)。该程序应计算和显示每次旅行每加仑所获得的英里数,并打印到目前为止所有行程的每加仑总里程数。所有平均计算都应使用浮点结果。

见下面的实现。是的,这个类名很奇怪,但是我不想改变它。代码是否满足分配要求?我是否完全没有击中目标,如果是的话,我离目标有多远?

代码语言:javascript
运行
复制
 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");



        }    
    }
EN

回答 2

Code Review用户

发布于 2015-12-20 12:44:20

您需要做的一件事是有条不紊地测试代码。到目前为止,您只对代码进行了“工作”测试,但测试的目的是找出哪些代码不工作(按预期)。

这是你也可以交的,这是一个很好的做法,进入-你会需要它,如果你编程专业。随着代码的增长,您可能需要考虑将代码的用户界面与业务逻辑分开,以便可以使用测试程序单独测试它们。

对于小部分代码,测试计划对您的需求来说是“足够好”的。

逻辑测试-查看循环和分支条件,以确定哪些输入应该将它们带到每个分支。例如,您的UI说输入使用的-1加仑将退出-是吗?你的程序能得到零行程吗?它应该如何处理呢?

验证测试--您能否得到无效的输入,从而使您的代码做一些您没有预料到的事情?例如,在输入错误的情况下,division by zero是否有机会?如果用户输入可以生成异常,那么应该减轻它。

计算测试-当您混合数据类型时,您是否获得了适当的精度?(另一个答案指出了那个部门的一个缺陷。)如果手动计算,计算结果是否与您所期望的一样?您是否得到了正确的输出(例如,在每个循环中,规范都要求到目前为止的平均值)。

因为你的程序很简单,所以很容易测试好。但是,每次您发现一个bug时,不要认为它是一个孤立的问题--当您有一个bug时,它通常意味着您已经找到了一个bug类,您应该检查该bug是否出现在其他地方,它经常会出现。

查看代码中的变量:

  • totalTrips可能应该是trips,因为它只是一个计数器。
  • totalMilesPerGallon刚刚被添加到,但是您正在添加一个平均值。要么你的命名是错误的,要么你的逻辑是错误的。

这个类也可以使用比MagicNumber更有意义的名称,选择有意义的名称是一个明确的指示,表明您已经完全理解问题或需要您的代码试图解决。这也是一个方便的“红旗”,如果您不能轻易地想出一个名称,那么您可能需要在编写任何(更多)之前检查您是否理解了您希望您的代码做得更清楚。

考虑到代码重用,您真的需要列出两次的所有输入吗?还有其他方法可以对其进行编码以避免输入的重复吗?

最后,您可能需要再次检查您的格式,如果这是您遵循的约定,则您的大括号{...}应该匹配。大多数IDE都会为你这么做。

所有这些都会让您很好地处理所缺少的内容,以及您的代码目前如何改进。

票数 4
EN

Code Review用户

发布于 2015-12-20 11:39:47

用于低效车辆的

Bug

代码语言:javascript
运行
复制
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

嗯,我每加仑不到一英里,但肯定超过零。

这与规范相冲突:

所有平均计算都应使用浮点结果。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/114531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档