java - 私有整数变量在更新一次后不再更新(Java)
问题描述
我正在编写一个程序,用户可以在其中输入金额(作为销售),输入他们是否想用现金或卡支付,然后询问他们是否希望输入另一个金额(只是为了练习 Java 编程)。每当我输入金额并选择现金时,它应该告诉我到目前为止已记录的现金销售数量。
但是,每当我在添加第一个后添加另一个金额时,现金销售的计数仍然保持不变 (1)。此外,每当用户不再希望输入任何交易时,也应显示现金/卡交易的总金额。另一个问题是现金总额没有加起来,只显示最后输入的值。任何解决这些问题的帮助将不胜感激。
这是两个类的代码:
SalesRegister.java
package Week2;
public class SalesRegister {
private int numCashSales;
private double valueCashSales;
private int numCardSales;
private double valueCardSales;
private String transactions;
public SalesRegister() {
this.numCashSales = 0;
this.valueCashSales = 0.0;
this.numCardSales = 0;
this.valueCardSales = 0.0;
this.transactions = "";
}
public int getNumCashSales() {
return this.numCashSales;
}
private void addTransaction(boolean isCash, double amount) {
if (isCash) {
transactions += "CASH SALE\t";
} else {
transactions += "CARD SALE\t";
}
transactions += amount + "\n";
}
public void cashSale(double saleValue) {
if (saleValue > 0.0) {
System.out.println("Cash sale recorded.");
valueCashSales += saleValue;
numCashSales++;
System.out.println(numCashSales);
addTransaction(true, saleValue);
}
}
public void cardSale(double saleValue) {
if (saleValue > 0.0) {
numCardSales++;
valueCardSales += saleValue;
addTransaction(false, saleValue);
}
}
public String getTransactions() {
String result = "";
result += "Cash Sales: " + numCashSales + " Total: " + valueCashSales + "\n";
result += "Card Sales: " + numCardSales + " Total: " + valueCardSales + "\n";
result += "Transaction List \n";
result += "+--------------+ \n";
result += transactions + "\n";
return result;
}
}
saleTest.java
package Week2;
import java.util.Scanner;
public class saleTest {
public static void main(String[] args) {
double amount = 0;
int i = 0;
int y = 0;
boolean isCash = false;
Scanner in = new Scanner(System.in);
i = 0;
do {
i = 0;
System.out.print("Please enter the amount: ");
amount = in.nextDouble();
SalesRegister register = new SalesRegister();
while (i == 0) {
System.out.print("Pay with cash or card? ");
String ans = in.next();
if (ans.equalsIgnoreCase("cash")) {
System.out.println("Cash selected.");
isCash = true;
register.cashSale(amount);
i = 1;
} else if (ans.equalsIgnoreCase("card")) {
isCash = false;
System.out.println("Card selected.");
register.cardSale(amount);
i = 1;
} else {
System.out.println("PLEASE ENTER A VALID OPTION, ENTER 'card' OR 'cash'");
i = 0;
}
if (i != 0) {
System.out.println("Would you like to add another amount? ('yes' or 'no')");
String a = in.next();
if (a.equalsIgnoreCase("yes")) {
y = 1;
System.out.println(a);
} else if (a.equalsIgnoreCase("no")) {
y = 0;
System.out.println("\n\n\n" + register.getTransactions());
} else {
System.out.println("PLEASE ENTER A VALID OPTION, ENTER 'yes' OR 'no'");
}
}
}
} while (y == 1);
}
}
解决方案
您正在SalesRegister
使用循环的每次迭代创建一个新对象,从而重置存储的值。
您需要在 do-while-loop 之前移动构造函数,即
Scanner in = new Scanner(System.in);
SalesRegister register = new SalesRegister();
i=0;
do {
i=0;
...
推荐阅读
- javascript - 检查是否
包含一个词的价值
- c++ - 加权随机 n 次优化
- node.js - 使用 fs.readFile() 读取 fs.createWriteStream() 创建的文件是否不当?
- php - 数据表警告表 id=datatables-example - 无效的 json 响应
- python - 如何在geojson弹出窗口中显示信息 - Python
- xamarin - Xamarin.Forms Shell:有没有办法使用 GoToAsync 和 Routing 导航到选项卡,并在那里推送页面
- regex - 使用正则表达式从 payload_printable 字段中提取 Splunk 域
- router - VPN 能否绕过基于 MAC 地址的 LAN 访问限制
- amazon-web-services - 用于控制台访问的同一账户中的 IAM 用户的 IAM 角色
- ios - 安装 cocoapods 时出现 gem 本机扩展错误