我如何摆脱这个怪异的循环

时间:2014-10-18 20:49:18

标签: java

我明白,当状态为真时,循环将继续运行。我想如果我只是输入loop = false,在循环的}括号后我可以继续编码。显然我错了,它不会运行任何东西。有人请告诉我如何摆脱这种困境。

System.out.println("You total balance is 0.00, "
                + "please deposit coins and type done when finished");

        while(loop){
            if (input.hasNextInt()){
                deposit = input.nextBigDecimal();}
                String change = input.next();

        switch (change){

        case "quarter":
            balance= quarter.multiply(deposit);
            total=total.add(balance);
            System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)");
            break;

        case "dime": 
            balance=dime.multiply(deposit);
            total=total.add(balance);
            System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)");
            break;
        case "nickel":
            balance=nickel.multiply(deposit);
            total=total.add(balance);
            System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)");
            break;
        case "penny":
            balance=penny.multiply(deposit);
            total=total.add(balance);
            System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)");
            break;
        case"done":
            System.out.println("Your total is $"+total);
            fee=total.multiply(feeRate);
            System.out.println("The exchance fee is 9.1% which amounts to $"+fee);
            grandTotal=total.subtract(fee);
            System.out.println("Your total balance minus the exchange fee is $"+grandTotal);

            break;

        default: System.out.println("There is a issue at "+change);}

            } System.out.println("4");

        }

}

4 个答案:

答案 0 :(得分:5)

关键是要更改循环变量,使其变为false,从而退出while循环。因此,更改case "done"块中的循环变量。在该块中,设置loop = false;

    case"done":
        System.out.println("Your total is $"+total);
        fee=total.multiply(feeRate);
        System.out.println("The exchance fee is 9.1% which amounts to $"+fee);
        grandTotal=total.subtract(fee);
        System.out.println("Your total balance minus the exchange fee is $"+grandTotal);

        loop = false;   // ************  add this ************

        break;

请记住,关键概念是导致循环继续的事物必须以某种方式循环本身内进行更改。否则while循环将永远不会结束。

答案 1 :(得分:3)

打破循环的三种方法。

A)将您的标志变量设置为false

loop = false;

由于您已经拥有此变量,因此这是一种更好(更简单)的方法。

B)使用带标签的休息时间。

label: while(true) {
  // ...
  switch(something) {
    break label; // Without a label, it would only leave the switch!
  }
}

有些人会对这最后一个解决方案不满,因为它本质上是一个“goto”。

C)使用更多模块化代码。

在许多情况下,更清洁的方法是使用方法。然后你可以“break”退出内部循环或切换return以实际离开子过程并返回结果。

这会使代码更容易理解,return的语义通常比break的语义更合适。

答案 2 :(得分:1)

循环将继续循环,直到循环变量设置为false。在“完成”的情况下,只需将其设置为false。这样,它不会再循环回来。

        case"done":
            System.out.println("Your total is $"+total);
            fee=total.multiply(feeRate);
            System.out.println("The exchance fee is 9.1% which amounts to $"+fee);
            grandTotal=total.subtract(fee);
            System.out.println("Your total balance minus the exchange fee is $"+grandTotal);
            loop = false; // This is the line to add.
            break;

答案 3 :(得分:1)

您必须将while循环内变量loop的值更改为false

我想这应该是用户输入done时的情况。所以在这种情况下添加以下行:

loop = false;

case "done":区块中的任何位置