大家晚上好,
我必须创建一个利用两个类的程序。一个将包含用于输出的主方法,另一个类将用于调用主方法的静态方法。我在这方面做得更好一点,但现在的问题是将一个静态方法中返回的变量传递给另一个静态方法以用于计算。现在我可能措辞不正确,如果是这样,请告诉我。
到目前为止,我已经创建了四种方法中的两种。这些方法将输入一个总数,第二种方法将使用 if, else 语句考虑佣金率,第三种方法将使用前一种方法中确定的费率计算佣金金额,第四种方法将显示结果。
我得到的问题是在第二类的第一个静态方法中,它将显示问题,我可以输入金额。但是,输入不会转移到下一个方法,尽管我将其作为参数传递给第二个方法。我觉得一旦我理解了为什么它没有通过,我编写程序的其余部分应该没有问题。主要类称为TapCoCommission。使用静态方法的类是TapCoCommissionCalc(令人困惑的是,老师希望这些方法以这种方式命名。
我认为这与返回值的设置方式或参数必须存在的方式有关。任何澄清都非常感谢!
//Main class begins here
import java.util.Scanner;
import static java.lang.System.out;
public class TapCoCommission
{
public static final int COMMISSION_2 = 2;
public static final int COMMISSION_5 = 5;
public static void main(String[] args)
{
double inputTotalMonthlySales = 0;
double commRate = 0;
TapCoCommissionCalc.inputTotalSales(inputTotalMonthlySales);
TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);
}
}
// Class with static methods begin here
import java.util.Scanner;
import static java.lang.System.out;
public class TapCoCommissionCalc
{
public static final double COMMISSION_2 = 0.02;
public static final double COMMISSION_5 = 0.05;
public static double inputTotalSales(double inputTotalMonthlySales)
{
Scanner keyboard = new Scanner(System.in);
out.println("Enter the total sales for this month.");
inputTotalMonthlySales = keyboard.nextDouble();
return inputTotalMonthlySales;
}
public static double setCommRate(double inputTotalMonthlySales)
{
double commRate = 0;
if (inputTotalMonthlySales <= 10000)
{
commRate = COMMISSION_2;
return commRate;
}
else if (inputTotalMonthlySales > 10000)
{
commRate = COMMISSION_5;
return commRate;
}
else
{
out.println("Please enter amount a positive numerical amount in dollars and cents.");
}
return commRate;
}
public static double calcCommAmount(double commRate, double inputTotalMonthlySales)
{
double commAmount = commRate * inputTotalMonthlySales;
return commAmount;
}
public static void displayCommResults()
{
}
}
您不需要将inputTotalMonthlySales
传递到第一种方法中,只需传递到第二种方法中。 事实上,inputTotalMonthlySales
是你从第一种方法中获得的价值。
所以你应该把main
改成这样的行。
double inputTotalMonthlySales = TapCoCommissionCalc.inputTotalSales();
double commRate = TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);
你应该把inputTotalSales
改成这样。
public static double inputTotalSales(){
Scanner keyboard = new Scanner(System.in);
out.println("Enter the total sales for this month.");
double inputTotalMonthlySales = keyboard.nextDouble();
return inputTotalMonthlySales;
}
这个想法是,当你在被调用的方法中有return
时,这就是调用方法中可用的值。 您可以在写入时将该值分配给变量
something = method call ( .... );
在第二类中
public static double inputTotalSales(double inputTotalMonthlySales)
{
Scanner keyboard = new Scanner(System.in);
out.println("Enter the total sales for this month.");
inputTotalMonthlySales = keyboard.nextDouble();
return inputTotalMonthlySales;
}
不需要输入参数inputTotalMonthlySales
。编写此方法的正确方法是:
public static double inputTotalSales()
{
Scanner keyboard = new Scanner(System.in);
out.println("Enter the total sales for this month.");
double inputTotalMonthlySales = keyboard.nextDouble();
return inputTotalMonthlySales;
}
inputTotalMonthlySales
是方法中的局部变量,将返回给调用方。
在头等舱
double inputTotalMonthlySales = 0;
....
TapCoCommissionCalc.inputTotalSales(inputTotalMonthlySales);
TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);
将最后 2 行更改为
inputTotalMonthlySales = TapCoCommissionCalc.inputTotalSales();
commRate = TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);
这会将方法返回的值存储到局部变量中。此局部变量与在第二个类方法中声明的变量不同,即使它具有相同的名称。
另外,一个强烈的警告:你不应该使用浮点(即double
( 来存储货币值,因为浮点不能准确地表示所有十进制值,从而导致计算错误。 货币应始终使用BigDecimal
。 有关所有血腥的细节,请阅读每个计算机科学家都应该知道的浮点运算和 浮点数坏了吗?
public static final int COMMISSION_2 = 2;
public static final int COMMISSION_5 = 5;
public static void main(String[] args)
{
double inputTotalMonthlySales = 0;
double commRate = 0;
inputTotalMonthlySales=VipCustomer.inputTotalSales();
commRate=VipCustomer.setCommRate(inputTotalMonthlySales);
System.out.println(commRate);
}
在您的主要方法中尝试此操作。它会正常工作。
实际上,您不必为第一种方法传递参数inputTotalMonthlySales,因为您正在获取该值的用户输入。代码的问题在于您没有将方法的返回值存储在任何变量中,甚至没有打印它们。这就是您看不到任何输出的原因。