首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本吸烟省钱计算器

基本吸烟省钱计算器
EN

Code Review用户
提问于 2017-04-16 16:06:05
回答 2查看 87关注 0票数 2

我对Java非常陌生,我想尝试制作一个可以告诉用户在一定时间内节省多少的吸烟计算器。如果有人能告诉我他们会在哪里改进我的代码,以及他们会添加哪些其他特性,我会很感激。

在用java编写代码时,即使是这样的基本程序,我也应该始终使用对象吗?

代码语言:javascript
复制
import java.util.Scanner;

public class Calculator {
    public static void main(String args[]) {

        Scanner scan = new Scanner(System.in);

        //Packets
        System.out.println("How many packets do you smoke a week?");
        double packets = scan.nextDouble();

        //cost
        System.out.println("How much is each packet?");
        double cost = scan.nextDouble();

        //weekly
        double weekly;
        weekly = (cost*packets);
        System.out.println("In one week you would save: €" + weekly);

        //monthly
        double monthly;
        monthly = (weekly*4);
        System.out.println("In one month you would save: €" + monthly);

        //threeMonths
        double threeMonths;
        threeMonths = (weekly*12);
        System.out.println("In three months you would save: €" + threeMonths);

        //sixMonths
        double sixMonths;
        sixMonths = (weekly*26);
        System.out.println("In six months you would save: €" + sixMonths);

        //yearly
        double yearly;
        yearly = (weekly*52);
        System.out.println("In one year you would save: €" + yearly);

        //user input
        System.out.println("Enter a number of years and see how much you will save over that time period...");
        double user = scan.nextDouble();
        double userInput;
        userInput = (yearly*user);
        System.out.println("You would save €" + userInput + " in " + user + " years.");

          scan.close();
    }
}
EN

回答 2

Code Review用户

发布于 2017-04-16 17:54:27

在用java编写代码时,即使是这样的基本程序,我也应该始终使用对象吗?

你怎么会不呢?请注意,您现在正在此程序中使用一个对象,即Scanner对象。您还使用了Calculator类。因为这当然是Java的工作方式。在类之外没有任何方法。

现在,您应该创建一个中间类和对象吗?也许吧。也许不是。我想在这里看到更多的方法。例如,考虑

代码语言:javascript
复制
    public static void displayForTimePeriod(String message, double amount, double multiplier) {
        System.out.println(message, amount * multiplier);
    }

这将使您可以将大部分代码简化为

代码语言:javascript
复制
        double weekly = cost * packets;
        displayForTimePeriod("In one week you would save: €", weekly, 1.0);
        displayForTimePeriod("In one month you would save: €", weekly, 30/7.0);
        displayForTimePeriod("In three months you would save: €", weekly, 13.0);
        displayForTimePeriod("In six months you would save: €", weekly, 26.0);
        displayForTimePeriod("In one year you would save: €", weekly, 52.0);

您可以更进一步,创建一个类,但是它所包含的主要内容将是amount。请注意,在每次调用中都保持不变。

我想补充一下

代码语言:javascript
复制
        System.out.println("On average, you'll save €" + (weekly/7) + " every day.");

如果您愿意,可以通过包括闰年来使您的年计算更加准确。这将要求您从系统时间获取当前日期。记住要处理跨越几个世纪。2000年是闰年,但1900年不是,2100年也不是。

我让每月的数字更准确。除非月份是二月,否则一个月有超过二十八天(四个星期)。通常的近似是30。

我还修正了季度(三个月)的数字。大多数季度有十三周(例外是二月没有闰日的第一季度)。每季度十二周都太少了。

票数 1
EN

Code Review用户

发布于 2017-04-21 10:24:09

在用java编写代码时,即使是这样的基本程序,我也应该始终使用对象吗?

一般来说,如果你一开始就简单的话,学点东西就更容易了。在一辆小车里学开车比在1000‘s的科尼赛克里学要好。如果你不处于学习阶段,这取决于它是一个“抛弃”应用程序还是一个高效的应用程序。

对于您的代码,我只是重新编写了其中的一小部分,以便给您一个想法。

  • 我把扫描器读入不同的方法
  • 我介绍了枚举类型的“修饰符”(wich不好命名,但我没有想出更好的名称,您可以将它命名为'ThingThinger',它给出了该类型的相同概念),因为您实际上用不同的值做了几次相同的事情,这表明您可以将它包装成一个循环。
  • 我把计算转移到一个单独的方法
  • 还检查方法的顺序,它首先是main,然后是按它们在main方法中调用的顺序排序的。公共类计算器{专用静态扫描器扫描;公共静态空主(String args[]) { scan =新扫描器(System.in);双packetsPerWeek = askForAmountOfPacketsPerWeek();双重成本= askForCostPerPacket();Modifier[]修饰符= Modifier.values();for (修饰符:修饰符:修饰符){ double savings = calculateSavings(packetsPerWeek,cost,修饰符);System.out.printf(“您节省%f %s\n",储蓄,modifier.getText();} scan.close();}私有静态双askForAmountOfPacketsPerWeek() {System.out.println(”每周抽多少包?“);返回scan.nextDouble();}私有静态双askForCostPerPacket() {System.out.println(“每个包多少?”);返回scan.nextDouble();}私有静态双calculateSavings(双packetsPerWeek、双成本、修饰符){返回packetsPerWeek *成本* modifier.getAmountOfWeeks();}私有枚举修饰符{ WEEKLY(1,"weekly"),月度(4,“每月”),一年(52,“年”);私有最终int amountOfWeeks;私有最终字符串文本;修饰符( int amountOfWeeks,字符串文本){ this.amountOfWeeks = amountOfWeeks;this.text = text;} public int getAmountOfWeeks() {返回amountOfWeeks;}公共字符串getText() {返回文本;}
票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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