私有整数变量在更新一次后不会更新更多(Java)
我正在编写一个程序,用户可以输入一个金额作为销售,输入他们是想用现金还是信用卡支付,然后询问他们是否想输入另一个金额只是为了练习Java编程。每当我输入金额并选择“现金”时,它都会告诉我迄今为止记录的现金销售额 但是,每当我在添加第一个金额后添加另一个金额时,现金销售的计数仍然保持不变1。此外,当用户不再希望输入更多交易时,也应显示现金/卡交易的总金额。另一个问题是,现金总额不累加,只显示上次输入的值。 如果您能帮助解决这些问题,我们将不胜感激 以下是两个类的代码: SalesRegister.java私有整数变量在更新一次后不会更新更多(Java),java,oop,Java,Oop,我正在编写一个程序,用户可以输入一个金额作为销售,输入他们是想用现金还是信用卡支付,然后询问他们是否想输入另一个金额只是为了练习Java编程。每当我输入金额并选择“现金”时,它都会告诉我迄今为止记录的现金销售额 但是,每当我在添加第一个金额后添加另一个金额时,现金销售的计数仍然保持不变1。此外,当用户不再希望输入更多交易时,也应显示现金/卡交易的总金额。另一个问题是,现金总额不累加,只显示上次输入的值。 如果您能帮助解决这些问题,我们将不胜感激 以下是两个类的代码: SalesRegister.
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循环之前移动构造函数,即
Scanner in = new Scanner(System.in);
SalesRegister register = new SalesRegister();
i=0;
do {
i=0;
...
在循环的每次迭代中,您都会创建一个新的SalesRegister对象,从而重置存储的值。
您需要在do while循环之前移动构造函数,即
Scanner in = new Scanner(System.in);
SalesRegister register = new SalesRegister();
i=0;
do {
i=0;
...
嗯,当你在每次销售/客户之后扔掉收银机时,难怪你必须从0开始。您应该重新考虑何时/何地创建哪个变量。请正确设置代码格式。一行上有两个花括号是个坏兆头。格式正确的代码将帮助您解决问题,并可能使帮助您更具吸引力;内部while循环。你应该把它搬到外面去。好吧,每次销售/客户结束后,当你扔掉收银机时,难怪你必须从0开始。您应该重新考虑何时/何地创建哪个变量。请正确设置代码格式。一行上有两个花括号是个坏兆头。格式正确的代码将帮助您解决问题,并可能使帮助您更具吸引力;内部while循环。你应该把它搬到外面去。