【问题标题】:How do I increment a variable as another is being incremented?如何在增加另一个变量时增加一个变量?
【发布时间】:2012-10-30 19:57:12
【问题描述】:

我正在尝试用 Java 创建一个程序,在该程序中,第 4 次取款后的每次取款(银行账户程序)每月服务费增加 1 美元。我尝试使用循环,但它卡住了。

代码:

    public void monthlyProcess() {
    int w = getWithdrawals();
    if (w > 4) {
        while(w > 4) {
            serCharge++;
        }
    }
    super.monthlyProcess();
    if(bal <= MIN_BAL) {
        status = false;
    }
}

谢谢!

【问题讨论】:

  • 我认为你让自己陷入了无限循环。
  • 您的“业务逻辑”似乎不合逻辑。
  • while(w &gt; 4) {serCharge++;} 您需要在循环内更改w 或使用一些中断/返回来逃避它。
  • 我们需要整个上下文。无法弄清楚应该是什么业务规则。 super.monthlyProcess() 是做什么的?
  • 是的,我知道。当我尝试 while (wtm++) {serCharge++} 时,它说我正在尝试从 int 转换为 bool

标签: java loops increment


【解决方案1】:

在这里,这应该可以工作。

干杯!

public void monthlyProcess() {
    int w = getWithdrawals();
    if (w > 4) {
        serCharge += w - 4;
    }
    super.monthlyProcess();
    if(bal <= MIN_BAL) {
        status = false;
    }
}

【讨论】:

    【解决方案2】:

    对我来说看起来像是一个不定式循环,但总的来说我认为你完全不需要一个循环:

     public void monthlyProcess() {
        int w = getWithdrawals();
        if (w > 4) {
               while(w > 4) {
                serCharge++;
                w--;
             }
    
        }
        super.monthlyProcess();
        if(bal <= MIN_BAL) {
            status = false;
        }
    }
    

    应该这样做

    你得到了不定式循环,因为你没有对 w 变量做任何事情,它总是大于四,所以循环永远不会中断。如果确实如此,无论如何您最终都会收取巨额服务费,因为它会因为不定式循环而不断增加

    “一个程序员出去喝牛奶,他的妻子打电话给他说,‘你出去的时候能不能拿些鸡蛋’......他再也没有回来”

    【讨论】:

    • -1 : OP 希望在 4 日之后的 次提款中将服务费增加 1 美元。如果提款超过 4 次,您的解决方案只会增加 1 美元。
    • 如果 wtm 的值超过 4 一次,这不会增加 serCharge 吗?我需要 serCharge 随着 wtm 的增加而增加(在 wtm == 4 之后)
    • 对不起,我读错了这个问题,我认为这被称为每笔交易。更新答案
    • @AlexisPigeon 当循环为真时它将如何更新,直到 w 因为 == 4?
    【解决方案3】:

    为什么不只是surcharge += w-4

    编辑:

    surcharge += Math.max(w-4,0)

    【讨论】:

      【解决方案4】:

      到目前为止,其他答案正确地指向您完全摆脱 while 循环,但为了完整起见,这是一个保持该循环的解决方案:

      public void monthlyProcess() {
          int w = getWithdrawals();
          if (w > 4) {
              while(w > 4) {
                  serCharge++;
                  // make sure you update the value of w, 
                  // otherwise you'll be stuck in an infinite loop!
                  w--; 
              }
          }
          super.monthlyProcess();
          if(bal <= MIN_BAL) {
              status = false;
          }
      }
      

      【讨论】:

      • 退出无限循环的方法!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      相关资源
      最近更新 更多