我正在尝试编写一个平衡支票簿的程序。程序的输入应该是一系列代表支票和存款的数字。负数表示支票,正数表示存款。零表示数据结束。每次输入后,它应打印当前余额。
我能够让它显示余额,并让它显示新的平衡,但当我输入下一个数字时,它只会回到原始余额。这是我的代码:
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
答案 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
更改并反映正确的余额。