2017-11-27 16 views
2

私はセービングクラスを作成し、セッターとゲッターも作成しました。今私は預金の総額を計算するuメソッドが必要です。Javaのクラスフィールド内の計算方法

このクラスをプログラムで使用すると、誤った計算が行われます。プログラムは最初の値に最初の金額を加算します。

import java.util.Scanner; 

public class SavingDemo { 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     Saving save = new Saving(); 

     System.out.println("Deposit amount"); 
     double depositeAmount = input.nextDouble(); 
     save.setDeposits(depositeAmount); 
     System.out.println("Deposit amount"); 
     double depositeAmount2 = input.nextDouble(); 
     save.setDeposits(depositeAmount); 
     System.out.println("Deposit amount"); 
     double depositeAmount3 = input.nextDouble(); 
     save.setDeposits(depositeAmount); 
     System.out.println("The total amount has been deposited is " + save.getTotalAmountOfDeposits()); 
    } 
} 

そして、ここで出力されます:

Deposit amount 
12 
Deposit amount 
34 
Deposit amount 
56 
The total amount has been deposited is 24.0 

あなたはそのだけのちょうど私がプログラミングで全く新しいだと言及したいと思い12に12を追加した見ることができるように。一ヶ月以上。

答えて

-1

あなたは方法

public void addDeposits(double deposits) 
      { 
      this.deposits = this.deposits + deposits; 
      } 

を書いて、預金

1

私はあなたのコード内の二つの問題を参照してくださいを追加するには、このコールaddDeposits後

public void setDeposits(double deposits) 
      { 
      this.deposits = deposits; 
      } 

にsetDepositsを変更する必要があります。コメント行を見てください。 12 + 12が表示されているのは、JVMに指示しているとおりです。

System.out.println("Deposit amount"); 
double depositeAmount = input.nextDouble(); 
save.setDeposits(depositeAmount); 
System.out.println("Deposit amount"); 
double depositeAmount2 = input.nextDouble(); 
save.setDeposits(depositeAmount); // <= adds the wrong variable 
System.out.println("Deposit amount"); 
double depositeAmount3 = input.nextDouble(); 
save.setDeposits(depositeAmount); // <= adds the wrong variable 
System.out.println("The total amount has been deposited is " + save.getTotalAmountOfDeposits()); 

第2に、Savingクラスの実装にデザイン上の欠陥があるようです。

あなたは、あなたの合計で、あなたの実装を見とる場合変数のスコープに

をブラッシュアップしたいと思う:

public double getTotalAmountOfDeposits() 
     { 
     double total = 0; 
     return total = total + deposits; 
     } 

をあなたは0で、総起動するたびに、このメソッドを持っていますgetTotalAmountOfDeposits()が呼び出されます。このメソッドの変数totalは、そのメソッドのローカル変数です。それでは、あなたが現在持っていることは、変数

方法であるあなたは、クラス変数にいくつかの研究を行うことになるでしょう。これは、オブジェクトのインスタンスがインスタンス化されたオブジェクトのライフサイクルを通じてこの変数を割り当てられることを維持する。

同じ名前の変数がある場合は、thisというキーワードでインスタンス変数を取得できます。あなたは、オブジェクトが状態を維持したい場合は、あなたのセッター

public void setSomething(double something) { 
    this.something // class variable 
    something // method variable 
} 

を扱うとき

だから、あなたはあなたのオブジェクト自体にそれを設定して、自分の設定した堆積物は、その状態を変更することができます。いくつかの擬似コードは、あなたが前進するためのものです。代わりに、クラスのフィールド名ですダブル預金ダブルnewDepositsetDepositsの引数名()方法を変更保存クラス内の混乱を排除するために

public class Saving { 
    private double totalAmountOfDeposits; // you can modify this value with public methods 

    public void setDeposit(_) { 
     // Setter implementation 
     // increment totalAmountOfDeposits; 

    public double getTotalAmountOfDeposits(_) 
     // return totalAmountOfDeposits; 
} 
-1

。構成は合法ですが、それはちょっと混乱させます。 setDepositsインサイド()メソッドの使用:あなたもtotalAmountOfDepositsという名前のフィールドを持っているので、実際のところ

this.deposit+= newDeposit; 

は、あなたはフィールド完全堆積物を取り除くことができます。

public void clearDeposits() { 
    this.totalAmountOfDeposits = 0.0; 
} 

あなたgetTotalAmountOfDeposits()はdoesnのクラスを保存中方法:

this.totalAmountOfDeposits+= newDeposit; 

あなたはまた、clearDeposits()あなたの保存クラスで方法をお勧めします。代わりに使用本当に意味をなさない。あなたはいつもとにかく預金を合算しているので、あなただけのtotalAmountOfDepositsフィールド内に保持されているものを返すことができます。

public double getTotalAmountOfDeposits() { 
    return totalAmountOfDeposits; 
} 

上記の方法は、今のコースは非常にgetDeposits()メソッドと同じようにドロドロされるだろうですgetTotalDeposits()に変更できます。その後、getTotalNumberOfDeposits(へ)(メソッド名をgetTotalAmountOfDepositsを変更し、numberOfDepositsという名前の追加クラスフィールドを追加することができます

private double totalAmountOfDeposits; 
private int numberOfDeposits = 0; 

public double getTotalDeposits() {      
    return totalAmountOfDeposits; 
} 

public int getTotalNumberOfDeposits() { 
    return numberOfDeposits; 
} 

とあなたのsetDeposits()メソッド内のコード行を追加します。

numberOfDeposits++; 

それは次のようになりますようにするには:

を同様にそのメソッドにnumberOfDeposits = 0;
public void setDeposits(double newDeposit) { 
    totalAmountOfDeposits+= newDeposit; 
    numberOfDeposits++; 
} 

あなたがclearDepositsを(追加する場合)あなたの保存クラスに方法は、コードの行を追加することを忘れないでください。また、あなたのSavingDemoクラスのごメイン()メソッド内でいくつかの問題を持っている

public void clearDeposits() { 
    totalAmountOfDeposits = 0.0; 
    numberOfDeposits = 0; 
} 

:それは今のようになります。ユーザーが提供する各値に対して、setDeposits()メソッドに行った各呼び出しを実際に詳しく見てください。ユーザー提供の各値は、特定の倍精度型の変数名に入ります。あなたはsetDeposits()メソッドに渡していますか?;)あなたはあなたのすべてが世話をコンソールに表示することができましたら

System.out.println("The total amount has been deposited is " + 
      save.getTotalDeposits() + " by making " + 
      save.getTotalNumberOfDeposits() + " deposits.");