变量值不会改变,但我认为应该

时间:2014-01-10 01:00:09

标签: java

我正在尝试编写一个平衡支票簿的程序。程序的输入应该是一系列代表支票和存款的数字。负数表示支票,正数表示存款。零表示数据结束。每次输入后,它应打印当前余额。

我能够让它显示余额,并让它显示新的平衡,但当我输入下一个数字时,它只会回到原始余额。这是我的代码:

package assignments;

import java.util.Scanner;
public class Checkbook {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);

        System.out.print("Enter starting balance: ");
        double balance = keyboard.nextDouble();

        System.out.println();

        System.out.println("Balance: $" + balance);

        for (int i = 0; i < balance; i++) 
        {

            System.out.print("Enter an amount - Zero wil quit the program: ");
            double amount = keyboard.nextInt();

            System.out.println();

            double newBalance = (balance+amount);   
            System.out.println("Balance: " + newBalance);

            if (amount == 0) 
            {
                System.out.println("Your ending balance is: " + newBalance);
                System.exit(i);
            }
        }

    }

}

以下是我尝试运行它的示例:

Enter starting balance: 500

Balance: $500.0
Enter an amount - Zero will quit the program: 260

Balance: 760.0
Enter an amount - Zero will quit the program: 20

Balance: 520.0
Enter an amount - Zero will quit the program: 

它只是回到原来的平衡。我究竟做错了什么?

另外,我使用了System.exit(i),因为我不知道如果没有它就会让它停下来。以下是我不使用它的示例:

  

输入起始余额:500

Balance: $500.0
Enter an amount - Zero will quit the program: 0

Balance: 500.0
Your ending balance is: 500.0
Enter an amount - Zero will quit the program:

用它:

Enter starting balance: 500

Balance: $500.0
Enter an amount - Zero will quit the program: 0

Balance: 500.0
Your ending balance is: 500.0

4 个答案:

答案 0 :(得分:3)

不是将数字分配给新的双重分配,而是将其分配给现有余额。 newBalance是一个局部变量,它在每次迭代期间在循环中被覆盖。将balance存储在字段或类实例变量余额中将保留循环的每次迭代的值。

balance = (balance+amount);

balance += amount;  

答案 1 :(得分:2)

你说

double newBalance = (balance+amount); 

并且从未设置balance = newBalance

答案 2 :(得分:2)

您在分配值时始终写入newBalance,但从balance读取...以便以前的newBalance不断被替换。

答案 3 :(得分:2)

您已设置局部变量newBalance,但该值在下一次迭代时会丢失。在循环中将balance设置为newBalance,以便balance更改并反映正确的余额。