【问题标题】:Writing code - Class - Is this correct/Grade my code [closed]编写代码 - 类 - 这是正确的/给我的代码评分[关闭]
【发布时间】:2014-12-11 05:30:03
【问题描述】:

要求: 编写一个类 BankAccount,它有两个实例变量,分别代表所有者的名称(String 类型)和余额(double 类型)。向这个类添加以下方法:

  • 将 BankAccount 实例变量初始化为两个参数中的值的构造函数,所有者的名称和初始余额 (>=0.0)。
  • deposit:给定金额 (>0.0) 存入,此方法将其存入帐户。
  • withdraw:给定一个金额(>0.0 和
  • getName:此方法返回所有者名称。
  • getBalance:此方法返回第 t 个当前余额。 (不要尝试格式化数字 - 只需采用默认值即可。)

在您的方法中包括适当的检查,以确保存入和提取的金额满足指定的限制条件。使用良好的封装指南。

我是否正确解释并正确执行它,如果不是,需要修复什么以及如何修复。任何帮助表示赞赏。

代码:

import java.util.*;
public class BankAccount {
static Scanner in = new Scanner (System.in);
private static String name;
private static double balance;


public BankAccount(String n, double b){
    System.out.println("Enter your name: ");
    n = in.nextLine();
    name = n;
    System.out.println("Enter your current balance: ");
    b = in.nextDouble();
    balance = b;
}



public void deposit(){
    System.out.println("Enter the amount you would like to deposit: ");
    double deposit = in.nextDouble();
    if(deposit > 0.0){
        balance = balance + deposit;
    }
}


    public void withdraw(){
        System.out.println("Enter the amount you would like to withdraw: ");
        double withdraw = in.nextDouble();
        if(withdraw > 0.0 && withdraw <= balance){
            balance = balance - withdraw;
        }
    }
    public static String getName(){
        return name;
    }
    public static double getBalance(){
        return balance;
    }

    }

【问题讨论】:

  • 不太确定该类是否应该提示用户他们想要存款/取款的金额,您应该将值传递给这些方法...
  • 理想情况下,您必须从变量和方法声明中删除 static 关键字。如果您有静态变量,则不需要 getter。此外,静态名称和余额意味着所有 BankAccounts 将具有相同的名称和余额。

标签: java class methods


【解决方案1】:

将 BankAccount 实例变量初始化为两个参数中的值的构造函数,所有者的名称和初始余额 (>=0.0)。

好吧,你有构造函数,但是你覆盖了传递给它的值......

public BankAccount(String n, double b){
    System.out.println("Enter your name: ");
    n = in.nextLine();
    name = n;
    System.out.println("Enter your current balance: ");
    b = in.nextDouble();
    balance = b;
}

应该只是......

public BankAccount(String n, double b){
    name = n;
    balance = b;
}

deposit:给定金额 (>0.0) 存入,此方法将其存入帐户。

您的 deposit 方法不带任何参数...

public void deposit(double amount){
    if (amount > 0.0) {
        balance = balance + deposit;
    }
}

withdraw:给定金额(>0.0 和

deposit,不带参数...

public void withdraw(double amount){
    if (amount > 0.0 && amount <= balance) {
        balance = balance - amount;
    }
}

getName:此方法返回所有者名称。

检查...

getBalance:此方法返回第 t 个当前余额。 (不要尝试格式化数字 - 只需采用默认值即可。)

检查...

【讨论】:

  • 很好,我错过了depositwithdraw 的参数要求。不过可能希望包括以下检查:使用良好的封装指南。我知道帖子中没有说明它们,但提到它们的事实意味着需要一定数量的封装。
【解决方案2】:

如果它是正常使用的普通类,那么就可以了。

但是如果它被用于实时金融应用程序,那么方法应该被同步以进行线程安全操作,并且还删除静态变量声明,因为静态变量属于类而不是实例。

【讨论】:

  • 并且不使用 double 作为货币价值...
  • 它只是一个正常使用的普通类。只是一个帮助我上课的练习。
  • @MadProgrammer 虽然要求使用双精度。
  • @SeumasFrew 不是在挑剔你,答案过于挑剔,但如果他们想走那么远,就错过了一些本应涵盖的领域;)
【解决方案3】:

删除静态声明。除非您希望BankAccount 的每个实例都引用相同的balancename。此外,如果您的重载构造函数不使用/无论值如何设置,它们也不需要参数。

public class BankAccount {
    private Scanner in = new Scanner (System.in);
    private String name;
    private double balance;

   public BankAccount(){
       String n = "";
       double b = 0.0;

       System.out.println("Enter your name: ");
       n = in.nextLine();

       // check for null string
       if(!n.equals("")) {
           name = n;
       }

       System.out.println("Enter your current balance: ");
        // ToDo: add a check for input
       b = in.nextDouble();
       balance = b;
    }

    ...

    public String getName(){
        return name;
    }

    public double getBalance(){
        return balance;
    }
}

您可以保留重载的构造函数并将其与默认构造函数一起使用。比如……

public BankAccount(){

   String n = "";
   double b = 0.0;

   System.out.println("Enter your name: ");
   // ToDo: add a check for input
   n = in.nextLine();

   System.out.println("Enter your current balance: ");
   // ToDo: add a check for input
   b = in.nextDouble();

   this(n, b);
}

public BankAccount(String n, double b){
     // ToDo: add checks for parameter integrity
     this.name = n;
     this.balance = b;
}

【讨论】:

  • 除此之外,是否成功满足所有要求?
  • @SeumasFrew 我会说它满足了一半的要求。看看 MadProgrammer 的回答,他涵盖了大部分(如果不是全部)缺少的内容。
猜你喜欢
  • 2013-03-22
  • 2018-04-26
  • 2016-08-20
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多