大家晚上好
我必须创建一个利用两个类的程序。一个将包含用于输出的main方法,另一个将包含用于静态方法以调用main方法的类。我对此有所改善,但是现在的问题是将返回的变量以一种静态方法传递给另一种静态方法以用于计算。现在,我可能会这样错误地措辞,如果可以的话,请告诉我。
到目前为止,我已经创建了四种方法中的两种。这些方法将输入总计,第二种方法将考虑使用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()
{
}
}
答案 0 :(得分:0)
在第二堂课
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);
将最后两行更改为
inputTotalMonthlySales = TapCoCommissionCalc.inputTotalSales();
commRate = TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);
这会将方法返回的值存储到局部变量中。此局部变量与第二个类的方法中声明的局部变量不同,即使它具有相同的名称。
此外,强烈警告:由于浮点不能精确地代表所有十进制值,从而导致计算错误,因此切勿使用浮点数(即double
)存储货币值。货币应始终使用BigDecimal
。有关所有详细信息,请阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic,然后
Is Floating Point Broken?
答案 1 :(得分:0)
您无需将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 ( .... );
答案 2 :(得分:0)
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,因为您要为该值获取用户输入。代码的问题是您没有将方法的返回值存储在任何变量中,甚至没有打印它们。这就是为什么您看不到任何输出的原因。