首页 > 解决方案 > 私有整数变量在更新一次后不再更新(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);
    }
}

最后,这是控制台的输出窗口: 在此处输入图像描述

标签: javaoop

解决方案


您正在SalesRegister使用循环的每次迭代创建一个新对象,从而重置存储的值。
您需要在 do-while-loop 之前移动构造函数,即

Scanner in = new Scanner(System.in);
SalesRegister register = new SalesRegister();
i=0;
do {
    i=0;
...

推荐阅读