我正在尝试将变量传递给函数,让它循环遍历 for 循环并将新变量传递给现有函数。例如我原来的类看起来像这样
class Calculations {
//declare the variables in the class
double TotalPay;
double Sales;
double Salary;
double Commission;
double SalesTarget;
double AccelFactor;
double SalesIncentive;
double Increment;
double NewAccelFactor;
double TableSales = Sales * .5;
public Calculations(double Sales, double Salary, double Commission, double SalesTarget, double AccelFactor, double SalesIncentive, double Increment) { //calculations function - can be used when processing multiple inputs as well
this.Salary = Salary;
this.Sales = Sales;
this.Commission = Commission;
this.AccelFactor = AccelFactor;
this.SalesTarget = SalesTarget;
this.SalesIncentive = SalesIncentive;
this.Increment = Increment;
}
public void calculatePay() { //calculate the total pay using the above variables that have been set
if (Sales < SalesIncentive) {
TotalPay = Salary + (Sales * Commission);
}
if (Sales == SalesIncentive || (Sales > SalesIncentive && Sales < SalesTarget * 2)) {
TotalPay = Salary + ((Sales * Commission) * AccelFactor);
}
if (Sales > SalesTarget * 2) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 2));
}
if (Sales > SalesTarget * 3) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 3));
}
if (Sales > SalesTarget * 4) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 4));
}
if (Sales > SalesTarget * 5) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 5));
}
if (Sales > SalesTarget * 6) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 6));
}
if (Sales > SalesTarget * 7) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 7));
}
if (Sales > SalesTarget * 8) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 8));
}
if (Sales > SalesTarget * 9) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 9));
}
if (Sales > SalesTarget * 10) {
TotalPay = Salary + ((Sales * Commission) * (AccelFactor * 10));
}
}
public double getTotalPay() {
return TotalPay; //return total pay to use in the output
}
}
我的新函数如下所示
class TableOutput { //trying to output the table, but it's not working so well
//declare the variables in the class
double TotalPay;
double Sales;
double Salary;
double Commission;
double SalesTarget;
double AccelFactor;
double SalesIncentive;
double Increment;
double NewAccelFactor;
double TableSales;
double newSales;
double totalSales;
//int j = 0;
public TableOutput(double Sales, double Salary, double Commission, double SalesTarget, double AccelFactor, double SalesIncentive, double Increment) {
//assign instances of the variables
this.Salary = Salary;
this.Sales = Sales;
this.Commission = Commission;
this.AccelFactor = AccelFactor;
this.SalesIncentive = SalesIncentive;
this.Increment = Increment;
this.SalesTarget = SalesTarget;
this.TableSales = Sales * 0.5;
this.totalSales = TableSales + Sales;
this.newSales = newSales;
}
public void createTable() {
Calculations calc2; //create a new calculations instance
if (Sales < totalSales) { //while the sales are less than the TableSales then do this
for (double i = Sales; i < totalSales; i += 20000) { //for the Sales that are less than the TableSales, up the Sales by 20k and keep going until it reaches the limit of Sales *.5
newSales = i;
System.out.println("Total Sales Total Compensation\n");
calc2 = new Calculations(newSales, Salary, Commission, SalesTarget, AccelFactor, SalesIncentive, Increment);
calc2.calculatePay();
for (double j=Sales; j < totalSales; j += 20000) { //keep adding 20k to Sales and send it back to get a running total
System.out.println(newSales + " " + calc2.getTotalPay());
}
}
}
}
我想要做的是将销售额增加 20k,并使其增加 20k,同时将新的销售额传递回calculatePay 函数。我在这里缺少什么?这不应该是这样做的吗?
for (double i = newSales; i < TableSales; i =+20000) {
Calculations calc2;
calc2 = new Calculations(newSales, Salary, Commission, SalesTarget, AccelFactor, SalesIncentive, Increment);
calc2.calculatePay();
在我的主函数中,我以这种方式调用此类以获取输出:
TableOutput Table1 = new TableOutput(Sales, Salary, Commission, SalesTarget, AccelFactor, SalesIncentive, Increment);
Table1.createTable();
但仍然没有输出。
最佳答案
您的代码实际上存在很多问题。
1) 您设置 TableSales = Sales * .5;
初始化时。您没有初始化Sales
任何值,因此默认为 0。因此,TableSales = 0 *.5;
这意味着TableSales
始终为 0,这意味着您的 while 循环 while (Sales < TableSales)
永远都是假的。
而不是设置TableSales
当您第一次声明它时,您可以在构造函数中设置它,如下所示。
public TableOutput(double Sales, double Salary, double Commission, double SalesTarget, double AccelFactor, double SalesIncentive, double Increment) {
this.Salary = Salary;
this.Sales = Sales; //corrected this line as well (although you pass the variable newSales in to your constructor, you named the variable Sales in your constructor)
this.Commission = Commission;
this.AccelFactor = AccelFactor;
this.SalesIncentive = SalesIncentive;
this.Increment = Increment;
this.SalesTarget = SalesTarget;
this.TableSales = Sales * 0.5;
}
2) 您的for
循环是各种困惑。
一方面,您不正确地增加了它。你说i = +20000;
这只是在循环的每次迭代中表示 i = 20000 。您想要i += 20000
,这会将 20000 添加到 i
在每次迭代中。
此外,您从未使用 i
在你的for
无论如何循环。我相信您要做的就是增加 newSales
每次循环时值都会增加 20000,但您的代码当前所做的是将 0 传递给 Calculations
每次构造函数,因为你总是传入 newSales
变量,它始终为 0,因为您从未为其赋值。
我相信您想要完成的事情看起来更像是这样。
for (double sales = 0; sales < TableSales; sales += 20000) {
Calculations calc2;
calc2 = new Calculations(sales, Salary, Commission, SalesTarget, AccelFactor, SalesIncentive, Increment);
calc2.calculatePay();
System.out.println(calc2.getTotalPay());
}
OP代码更新后编辑:
您的while (Sales < TableSales)
循环仍然不会运行。
这是因为两件事:
首先,是因为您为 Sales
传入 0当您调用 TableOutput
的构造函数时类,所以TableSales
和Sales
两者都将为 0。您需要以非零数字开始销售。
其次,无论如何你都需要重新思考你的逻辑。当您创建 TableOutput
例如,您正在设置 TableSales
一半 Sales
是。所以:
If Sales = 10000, then TableSales = 5000
If Sales = 30000, then TableSales = 15000
...
所以Sales
永远大于 TableSales
所以你的 while 循环永远不会运行。
关于Java FOR 循环递增并将新变量传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31933113/