在我的程序中添加最后一个

时间:2013-09-18 23:44:34

标签: java double final

我试图在我的代码最终中制作一些双打。我尝试过一些方法,比如“public static final”,“just final”等等。

import java.util.Scanner;
import java.text.DecimalFormat;

public class Pay_stub {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        DecimalFormat df = new DecimalFormat("#.00");

        double fedinctax = .15;
        double statetax = .035;
        double socsectax = .0575;
        double meditax = .0275;
        double penplan = .05;
        double healthins = 75;

        double hoursworked;
        double hourlyrate;

        double netpay;
        double grosspay;

        String firstname, lastname;

        System.out.println("Enter employee first name: ");
        firstname = input.next();

        System.out.println("Enter employee last name: ");
        lastname = input.next();

        System.out.println("Enter hours worked: ");
        hoursworked = input.nextDouble();

        System.out.println("Enter hourly rate: ");
        hourlyrate = input.nextDouble();

        grosspay = hoursworked * hourlyrate;

        double fit = grosspay * fedinctax;
        double st = grosspay * statetax;
        double sst = grosspay * socsectax;
        double mmt = grosspay * meditax;
        double pp = grosspay * penplan;
        double total = fit + st + sst + mmt + pp + healthins;
        double net = grosspay - total;

        System.out.println(firstname + lastname + "'s monthly paycheck is: ");
        System.out.println("Gross Pay: " + (df.format(grosspay)));
        System.out.println("Federal Income Tax: " + fit);
        System.out.println("State Tax: " + st);
        System.out.println("Social Security Tax: " + sst);
        System.out.println("Medicare/Medicaid Tax: " + mmt);
        System.out.println("Pension Plan: " + pp);
        System.out.println("Health Insurance: " + healthins);
        System.out.println("Net Pay: " + (df.format(net)));
    }
}

这些是我想做的最终决定:

    double fedinctax = .15;
    double statetax = .035;
    double socsectax = .0575;
    double meditax = .0275;
    double penplan = .05;
    double healthins = 75;

我只是不确定我应该在代码中放置最后一行,或者它们应该如何编写

2 个答案:

答案 0 :(得分:2)

final double fedinctax = .15;

顺便说一句,而不是使用

final double fedinctax = .15;
final double statetax = .035;
final double socsectax = .0575;
...

你可以做到

final double fedinctax = .15,
             statetax = .035,
             socsectax = .0575,
             ...

或(缩进无关紧要)

final double fedinctax = .15, statetax = .035, socsectax = .0575, ...

所以你不必一遍又一遍地重新输入“final double”。 (同样适用于普通double,或任何其他类型的事情)

此外,最终字段的命名约定为ALL_CAPS,例如:final double STATE_TAX

答案 1 :(得分:0)

通常,如果您有一个在运行时已知的常量列表,那么首选的方法是创建一个枚举。您可以将数据与枚举中的枚举关联起来。

这比使常量数组静态和最终的模式更受欢迎。枚举是类型安全和实例控制的,而静态最终常量只有有限的类型安全。

你的常量有些异质(它们似乎并非都具有相同的基类型),但这里有一个名为“隐瞒”的枚举的例子:

enum Withholding {
    FEDERAL_INCOME (0.15),
    STATE_INCOME (0.035),
    SOCIAL_SECURITY (0.0575),
    MEDICARE (0.0275),
    PERSONAL_RETIREMENT (0.05);

    private final double rate;

    Withholding (double r) {
        this.rate = r;
    }

    getRate() { return this.rate; }
}

例如,要获取税前收入的预扣税率,您可以在代码中使用以下内容:

   double fed_withholding = gross_salary * Withholding.FEDERAL_INCOME.getRate();

在常量列表上使用枚举有许多优点。当您在编译时知道这样的列表时,您会发现使用枚举声明而不是声明的常量模式更容易维护,更易读,更健壮。