0

私はJavaクラスを受講しており、次のような割り当てを行う必要がありました。

Purchase という名前のクラスを作成します。各購入には、請求書番号、販売額、消費税額が含まれます。請求書番号と販売金額の set メソッドを含めます。売上高の set() メソッド内で、売上税を売上高の 7.5% (Purchase クラスの静的フィールドを使用) として計算します。また、適切にフォーマットされた出力表示で購入の詳細を表示する表示メソッドも含めます。ファイルを Purchase.java として保存します。プログラムが動作し、出力がきれいになるまで、プログラムをコンパイルして実行します。コース ドキュメントの説明に従って必要なドキュメントを追加し、.java ファイルをこの課題に添付します。

私の解決策は次のとおりです。

import java.util.*;

 public class Purchase {
    //Properties of Purchase class - static
    private static int invoiceNumber;
    private static double salesAmount;
    private static double salesTax;

    //setter for invoiceNumber
    public static void setInvoiceNum(int invNo){
        invoiceNumber = invNo;
    }

    //setter for salesAmount
    public static void setSalesAmount(double salesAmnt){
        salesAmount = salesAmnt;
        salesTax = 0.075*salesAmnt;
    }

    //public static method to display purchase info
    public static void displaySalesInfo(){
        System.out.println("Invoice Number: " + Purchase.invoiceNumber);
        System.out.println("Sales Amount: " + Purchase.salesAmount);
        System.out.println("Sales Tax: " + Purchase.salesTax);
    } 

    //main method that makes use of the static properties and display method    
    public static void main (String[] args) {
        //ask user to input purchase details
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter your invoice Number:" );
        int inv = scan.nextInt();

        System.out.println("Enter your Sales Amount:");
        double sales = scan.nextDouble();

        // send the user submitted purchase details to the setter methods and call display method
        setInvoiceNum(inv);
        setSalesAmount(sales);
        displaySalesInfo();     
    }

}

そして、私の先生のコメントは次のとおりです。 . 静的変数 salesTax を設定しましたが、その値はインスタンス メソッド パラメータに基づいています。これは論理エラーです. 税率のみを静的にする必要がありました. 他のすべてのフィールドを静的にする必要はありません.購入したものに関係なく同じです。送信された割り当てコードは、静的フィールドの概念を理解していないことを示しています。」

わからないだけ??彼は、私は静的フィールドを理解していないと言います.. 私はそんなに無知ですか? これは単に恥ずかしい..いくつかの光を当ててください.

4

6 に答える 6

2

あなたがしなければならなかったことは、行われたすべての購入に対して同じであるため、salesTax フィールドを静的にすることです。

そう、

private static final double SALES_TAX= 0.075; 
\\it is convention that final fields are given capitalized identifiers

salesTax に値を割り当てる方法が間違っています。それは次のようなものでなければなりません

private double salesTaxAmt;
\\ a variable to hold the sales tax amount specific to the purchase

メソッドで次のように設定しsetSalesAmountます

salesTaxAmt = salesAmt * salesTax;

変数はクラスのすべてのオブジェクトに共通であるためstatic、インスタンス コンテキスト (クラスの各インスタンスに固有のコード) からではなく、静的コンテキストから設定する必要があります。あれは

private int i;
private static int j;

これiはインスタンス変数であり、クラスのインスタンスが異なると値が異なる場合がありますが、jは静的フィールドであり、その値はクラスのすべてのインスタンスに共通です。どのインスタンスにアクセスjしても、その値はすべてのインスタンスで同じになります。

特定のインスタンスから静的フィールドの値を変更すると、クラスの他のすべてのインスタンスにも反映されます。

于 2013-10-09T15:46:03.557 に答える
1

静的フィールドは、クラスのすべてのインスタンスで共有されます。販売額と請求書番号を静的にすることで、基本的に、購入が 1 つだけの状況が作成されます (すべての請求書番号と販売額が同じであるため)。

先生があなたに示させようとしているのは、共有 (または静的) フィールドの適切な使用法、つまり売上税です。この場合、そのプロパティは実際にはすべての購入で共有されます。

売上税率のみを静的にする必要があります。あなたのmain方法では、あなたのループで、new購入インスタンスを作成する必要があります。

学習しているだけなので、ここでコードを提供するつもりはありませんが、正しい方向に向けられることを願っています。

于 2013-10-09T15:45:32.860 に答える
1

staticJavaのメンバーは、クラスの特定のインスタンスではなく、クラス全体に集合的に適用されるものであるため、作成する必要があるフィールドstaticはユニバーサルなものだけです。消費税率適切な選択であり、教授が指摘しているよう0.075に、コードの途中のように「魔法の数字」を埋めるべきではありません。その代わり:

static double salesTaxRate = 0.075;
// maybe static getter and setter

現在設定されているすべてのフィールドstatic(請求書番号と金額) はすべての購入に適用されるわけではなく、特定の購入にのみ適用されるため、インスタンス変数 ( ではありませんstatic) にする必要があります。

(最後に、丸め誤差のため、実際のコードではお金のために浮動小数点を使用したくありませんが、宿題には問題ありません。)

于 2013-10-09T15:46:07.697 に答える