在Java中如何在类字段内进行计算?

在Java中如何在类字段内进行计算?,java,class,methods,return,return-value,Java,Class,Methods,Return,Return Value,所以我创建了保存类,还创建了setter和getter。现在我需要u方法,它将计算存款总额 public class Saving { private double deposits; private double totalAmountOfDeposits; public double getDeposits() { return deposits;

所以我创建了保存类,还创建了setter和getter。现在我需要u方法,它将计算存款总额

public class Saving {

      private double deposits;

      private double totalAmountOfDeposits;

      public double getDeposits() 
             {                      
             return deposits;
             }

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

      public double getTotalAmountOfDeposits()
             {
             double total = 0;
             return total = total + deposits;
             }
}
当我在程序中使用这个类时,我得到了一个错误的计算。程序只需将存款的第一个值添加到第一个值

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。我只想提一下,我对编程完全是新手。不到一个月。

你应该写一个方法

public void addDeposits(double deposits) 
             { 
             this.deposits = this.deposits + deposits;
             }
把存款换成

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

在调用addDeposits以添加存款之后,您应该编写一个方法

public void addDeposits(double deposits) 
             { 
             this.deposits = this.deposits + deposits;
             }
把存款换成

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

在调用addDeposits以添加存款之后,我发现您的代码中有两个问题。看一下注释行。您看到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());
每次调用此方法
getTotalAmountOfDeposities()
时,总数从0开始。此方法中的
total
变量是其方法的局部变量。因此,您当前拥有的是一个方法变量

您需要对类变量进行一些研究。这将保持对象的实例在实例化对象的生命周期中分配此变量

当您有相同名称的变量时,可以使用
this
关键字获取实例变量

所以当你和二传手打交道的时候

 public void setSomething(double something) {
     this.something // class variable
     something // method variable
 }
如果希望对象保持状态,可以在对象本身上设置该状态,并让设置的存款修改该状态。一些伪代码可以让你继续前进

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;
}

我在代码中看到两个问题。看一下注释行。您看到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());
每次调用此方法
getTotalAmountOfDeposities()
时,总数从0开始。此方法中的
total
变量是其方法的局部变量。因此,您当前拥有的是一个方法变量

您需要对类变量进行一些研究。这将保持对象的实例在实例化对象的生命周期中分配此变量

当您有相同名称的变量时,可以使用
this
关键字获取实例变量

所以当你和二传手打交道的时候

 public void setSomething(double something) {
     this.something // class variable
     something // method variable
 }
如果希望对象保持状态,可以在对象本身上设置该状态,并让设置的存款修改该状态。一些伪代码可以让你继续前进

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;
}

要消除Saving类中的混淆,请将setDeposits()方法的参数名称更改为double newDeposit,而不是double deposits,后者也是类字段名称。虽然这个构造是合法的,但它确实让人有点困惑。在setDeposits()方法中使用:

this.deposit+= newDeposit;
事实上,您可以完全删除存款字段,因为您还有一个名为totalamountofdeposities的字段。用它来代替:

this.totalAmountOfDeposits+= newDeposit;
您可能还希望在Saving类中使用clearDeposits()方法:

public void clearDeposits() {
    this.totalAmountOfDeposits = 0.0;
}
您在Saving类中的getTotalAmountOfDeposities()方法也没有任何意义。由于您总是以任何方式对存款进行求和,因此您只需返回totalAmountOfDeposits字段中的存款即可:

public double getTotalAmountOfDeposits() {
    return totalAmountOfDeposits;
}
上述方法现在当然与getDeposits()方法非常相似,后者可以更改为getTotalDeposits()。然后,您可以将getTotalAmountOfDeposities()方法名称更改为getTotalNumberOfDeposities(),并添加一个名为NumberOfDeposities的附加类字段:

private double totalAmountOfDeposits;
private int numberOfDeposits = 0;

public double getTotalDeposits() {                      
     return totalAmountOfDeposits;
}

public int getTotalNumberOfDeposits() {
    return numberOfDeposits;
}
然后在setDeposits()方法中添加代码行:

numberOfDeposits++;
这样看起来就像:

public void setDeposits(double newDeposit) {
    totalAmountOfDeposits+= newDeposit;
    numberOfDeposits++;
}
public void clearDeposits() {
    totalAmountOfDeposits = 0.0;
    numberOfDeposits = 0;
}
如果您确实向您的Saving类添加了clearDeposits()方法,那么不要忘记添加代码行:
numberOfDeposits=0编码到该方法中。现在它可能看起来像:

public void setDeposits(double newDeposit) {
    totalAmountOfDeposits+= newDeposit;
    numberOfDeposits++;
}
public void clearDeposits() {
    totalAmountOfDeposits = 0.0;
    numberOfDeposits = 0;
}
您的SavingDemo类的main()方法中也存在一些问题。仔细查看您对用户提供的每个值调用的setDeposits()方法。每个用户提供的值都进入一个特定的双类型变量名。这就是传递给setDeposits()方法的内容吗?;)

完成所有工作后,您可以在控制台上显示:

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

要消除Saving类中的混淆,请将setDeposits()方法的参数名称更改为double newDeposit,而不是double deposits,后者也是类字段名称。虽然这个构造是合法的,但它确实让人有点困惑。在setDeposits()方法中使用:

this.deposit+= newDeposit;
事实上,您可以完全删除存款字段,因为您还有一个名为totalamountofdeposities的字段。用它来代替:

this.totalAmountOfDeposits+= newDeposit;
您可能还希望在Saving类中使用clearDeposits()方法:

public void clearDeposits() {
    this.totalAmountOfDeposits = 0.0;
}
您在Saving类中的getTotalAmountOfDeposities()方法也没有任何意义。由于您总是以任何方式对存款进行求和,因此您只需返回totalAmountOfDeposits字段中的存款即可:

public double getTotalAmountOfDeposits() {
    return totalAmountOfDeposits;
}
上述方法现在当然与getDeposits()方法非常相似,后者可以更改为getTotalDeposits()。然后可以更改getTotalAmountOfDeposities()的<