有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

所以我创建了保存类,还创建了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。我只想提一下,我对编程完全是新手。不到一个月


共 (3) 个答案

  1. # 1 楼答案

    要消除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++;
    }
    

    如果您确实向Saving类添加了clearDeposits()方法,那么不要忘记将代码行:numberOfDeposits = 0;也添加到该方法中。现在它可能看起来像:

    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.");
    
  2. # 2 楼答案

    你应该写一个方法

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

    然后把存款换成

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

    在此之后,调用AddDepartments以添加存款

  3. # 3 楼答案

    我发现你的代码中有两个问题。看看评论的那行。您看到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());
    

    第二,看起来在Saving类的实现中可能存在设计缺陷

    你需要复习一下变量范围

    如果你看一下你的总体实施情况:

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

    每次调用此方法getTotalAmountOfDeposits()时,总数从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;
    }