-2

私は理解できないように見える私のコードに少し問題があります。これを実行すると、名前を挿入する代わりに「Customer is null」と表示されます。また、常にすべての税を 0 として計算します (if ステートメントに何か問題がありますか?)。問題を発見できる可能性はありますか?他のすべてが正しく機能しているように見えます。(Customer クラスでメソッドを記述し、それらを TestCustomer クラスで呼び出します。手順は投稿の最後にあります)。

時間をかけてこれを読んで助けようとする人に感謝します。情報が多すぎて申し訳ありませんが、これを引き起こしている原因がわからないので、すべてを含めることにしました。

顧客クラス

import java.util.Scanner;

import javax.swing.JOptionPane;


public class Customer {
public static double taxRate = 0.00;
public static double saleRate = 0.00;
String customerName;
double listSaleAmount;
double saleDiscount = 0;
double netSaleAmount;
double taxAmount;
double saleTotal;
boolean taxable;
public double total;

public Customer (String customerName, boolean taxable) {

}

public void calculateTax () {
    saleDiscount = listSaleAmount*(saleRate/100);
    netSaleAmount = listSaleAmount-saleDiscount;

    if (taxable = true){
    taxAmount = netSaleAmount*(taxRate/100);
    }
    else{
        taxAmount = 0;
    }

    saleTotal = netSaleAmount + taxAmount;

    total += saleTotal;


}

public void printRecord () {
    System.out.println("Customer is " + customerName);
    System.out.println("Sale amount is $" + listSaleAmount);
    System.out.println("Discount amount is $" + saleDiscount);
    System.out.println("Net Sale Amount is $" + netSaleAmount);
    System.out.println("Tax amount is $" + taxAmount);
    System.out.println("Total Sale Amount is $" + saleTotal);
    System.out.println(" ");
}

public static void changeTaxAmount () {
    Scanner input = new Scanner(System.in);
    double userTaxAmount = Double.parseDouble(JOptionPane.showInputDialog("What is the Tax Rate? (8.25 & 8.50 for testing)"));
    taxRate = userTaxAmount;    
}

public static void changeSaleRate () {
    Scanner input = new Scanner(System.in);
    double userSaleAmount = Double.parseDouble(JOptionPane.showInputDialog("What is the Sale Discount Rate? (0.00 & 7.50 for testing)"));
    saleRate= userSaleAmount;

}

public static void printTaxRate() {
    System.out.println("Tax Rate is " + taxRate + "%.");
}

public static void printSaleRate() {
    System.out.println("The Sale Rate is " + saleRate + ".");
    System.out.println(" ");
}
}

TestCustomer クラス

public class TestCustomer {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

Customer customer1 = new Customer("Annie Smith", true);
Customer customer2 = new Customer("Bob Wilson", false);


Customer.changeTaxAmount();

Customer.printTaxRate();


Customer.changeSaleRate();

Customer.printSaleRate();

customer1.listSaleAmount = 65.00;
customer2.listSaleAmount = 52.00;


customer1.calculateTax();
customer1.printRecord();

customer2.calculateTax();
customer2.printRecord();


Customer.changeTaxAmount();
Customer.printTaxRate();
Customer.changeSaleRate();
Customer.printSaleRate();

customer1.listSaleAmount = 84.00;
customer2.listSaleAmount = 105.00;
customer1.calculateTax();
customer1.printRecord();
customer2.calculateTax();
customer2.printRecord();

double total2 = customer1.total + customer2.total;
System.out.println("The total of all sales is $" + total2);
    }

}

割り当てシート (今はファイルへの出力について心配する必要はありません。主要な仕組みを機能させたいだけです) ここに画像の説明を入力 ここに画像の説明を入力

また、このプロジェクトに関する私の最後の質問を手伝ってくれた方々にも感謝します。大変お世話になりました。

4

4 に答える 4

2

コンストラクターで

public Customer (String customerName, boolean taxable) {

}

パラメータが渡されますが、それらをクラス フィールドに割り当てることはありません。

試す

public Customer (String customerName, boolean taxable) {
    this.customerName = customerName;
    this.taxable = taxable;
}
于 2013-10-30T02:01:02.940 に答える
1

customerName および texable クラス レベル変数の値を設定するには、customer クラスでコンストラクターを定義する必要があります。

public Customer (String customerName, boolean taxable) {
  this.customerName = customerName;
  this.taxable = taxable;
}

また、以下の if 条件にも問題があるようです。

if (taxable = true){

比較には == 演算子を使用する必要があります。

if (taxable == true) {

実際、比較する必要はありません。使用するだけです:

if (taxable) {
于 2013-10-30T02:07:34.037 に答える
1

Customer クラスのコンストラクターは、名前と課税対象の値を Customer データ メンバーに割り当てる必要があります。

public Customer (String customerName, boolean taxable) {
    this.customerName = customerName;
    this.taxable = taxable;
}
于 2013-10-30T02:01:24.750 に答える
0

を使用する代わりにif (taxable = true)、単に使用してif (taxable)ください。

于 2013-10-30T02:13:57.677 に答える