Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
私有整数变量在更新一次后不会更新更多(Java)_Java_Oop - Fatal编程技术网

私有整数变量在更新一次后不会更新更多(Java)

私有整数变量在更新一次后不会更新更多(Java),java,oop,Java,Oop,我正在编写一个程序,用户可以输入一个金额作为销售,输入他们是想用现金还是信用卡支付,然后询问他们是否想输入另一个金额只是为了练习Java编程。每当我输入金额并选择“现金”时,它都会告诉我迄今为止记录的现金销售额 但是,每当我在添加第一个金额后添加另一个金额时,现金销售的计数仍然保持不变1。此外,当用户不再希望输入更多交易时,也应显示现金/卡交易的总金额。另一个问题是,现金总额不累加,只显示上次输入的值。 如果您能帮助解决这些问题,我们将不胜感激 以下是两个类的代码: SalesRegister.

我正在编写一个程序,用户可以输入一个金额作为销售,输入他们是想用现金还是信用卡支付,然后询问他们是否想输入另一个金额只是为了练习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循环之前移动构造函数,即

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循环。你应该把它搬到外面去。