Java FOR 循环递增并将新变量传递给方法

标签 java loops for-loop while-loop

我正在尝试将变量传递给函数,让它循环遍历 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 的构造函数时类,所以TableSalesSales两者都将为 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/

相关文章:

java - 从 Android 上的摄像头流式传输实时视频

java - 添加nio文件复制进度条

c++ - 循环菜单重复自己

python - 当循环结束时会发生什么?

sql-server - 如何在 SSIS 中配置 foreach 循环容器以获取定义的开始和结束日期并在其间的每个日期运行?

java - 这种情况下socket的accept方法会阻塞吗

java - 由于页脚,Selenium 元素点击被拦截

javascript - jQuery 下拉菜单在页面调整大小后导致无限循环

C循环: printing India Map

c++ - 如何在使用for循环和数组时更改为c代码