2013-03-19 78 views
1

我的作业是计算补充库存的珠宝店的税金和附加费,而且我碰到了一个小问题。我正在使用一种名为calcExtraTax的方法三次来计算人工费率以及州和联邦税。然后我需要获取该方法的每个实例的结果,并将该值传递给我的主方法中的相应变量。这是我的代码是什么样子,现在(显然不完整):从主要方法的调用结果到主要方法中的变量

import java.text.DecimalFormat; 
import java.util.Scanner; 
import javax.swing.JOptionPane; 

public static void main(String[] args) 
{ 

double stateRate = 0.1; 
double luxuryRate = 0.2; 
double laborRate = 0.05; 
double extraCharge; 
int numOrdered; 
double diamondCost; 
double settingCost; 
double baseCost; 
double totalCost; 
double laborCost; 
double stateTax; 
double luxuryTax; 
double finalAmountDue; 

    Scanner keyInput = new Scanner(System.in); 

    System.out.println("What is the cost of the diamond?"); 
    diamondCost = keyInput.nextDouble(); 
    System.out.println("What is the cost of the setting?"); 
    settingCost = keyInput.nextDouble(); 
    System.out.println("How many rings are you ordering?"); 
    numOrdered = keyInput.nextInt(); 

    baseCost = diamondCost + settingCost; 
    calcExtraCost(baseCost, laborRate); 
    laborCost = extraCharge; 
    calcExtraCost(baseCost, stateRate); 
    stateTax = extraCharge; 
    calcExtraCost(baseCost, luxuryRate); 
    luxuryTax = extraCharge; 
    totalCost = baseCost + laborCost + stateTax + luxuryTax; 
    finalAmountDue = numOrdered*totalCost; 
    JOptionPane.showMessageDialog(null, "The final amount due is = " + finalAmountDue); 
} 
public static void calcExtraCost(double diamond, double rate) 
{ 
    double extraCharge = diamond*rate; 
    ??????????? 
} 

我试图搞清楚的是,我需要些什么把我的次要方法,以便能够通过结果根据公式中使用的费率变量,每次都变为不同的税费成本变量。

+1

你知道如何从返回值方法](http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html),还是你只用过'void'方法? – DaoWen 2013-03-19 23:15:14

+0

我只使用过无效方法。 – Sai 2013-03-19 23:16:44

+2

http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html – James 2013-03-19 23:19:17

回答

1

除了将返回类型更改为double并返回计算值之外,您不需要对您的calcExtraCost做任何特殊处理。例如

public static double calcExtraCost(double diamond, double rate) 
{ 
    double extraCharge = diamond*rate; 
    double tax = //some calculations 
    return tax 
} 

所以这个方法会返回计算的值。

在您的主要方法中,您需要将该值存储到所需的相应双精度值。例如,如果你要计算的luxuryTax,那么你做这样的事情:而不是让你的方法static

luxuryTax = calcExtraCost(baseCost, luxuryRate); 

也有一些建议,使之成为non-static方法,创造一个类的对象,其中的方法被定义,并调用该对象的方法。

例如,如果在这里你定义你的方法被调用税,那么你就创建纳税的某个对象的类:

Tax tax = new Tax(); 

,并在该对象上调用calcExtraCost

tax.calcExtraCost(); 

这样你删除方法的静态部分。所以,你的方法签名变成这样:

public static double calcExtraCost(double diamond, double rate) 
{ 
    return diamond * rate; 
} 

现在,您可以:

public double calcExtraCost(double diamond, double rate) 
1

你可以通过改变其签名从voiddouble并添加return声明从您的helper方法返回的diamond*rate值将调用的结果分配给主方法中的变量:

laborCost = calcExtraCost(baseCost, laborRate); 
+0

所以在方法中不需要计算?我可以简单地返回该值,而无需首先为其分配变量。 – Sai 2013-03-19 23:28:49

+0

@Sai - 是的,你可以返回一个中间表达式 - 没有必要先将它分配给一个值。如果你正在做更复杂的事情,那么声明一个新的变量来保存结果可能是值得的,但在这种情况下并非如此。 – DaoWen 2013-03-19 23:31:42