【问题标题】:Simple Banking Application - Deposit and Withdrawing (Using Abstract & Constructors) (JAVA)简单的银行应用程序 - 存款和取款(使用抽象和构造函数)(JAVA)
【发布时间】:2019-12-18 00:00:00
【问题描述】:

我需要帮助来弄清楚如何修复我的代码。我试图允许使用菜单在银行存款和取款。发生的情况是,当我通过存款或取款选项时,这些值不会被存储,只是在循环再次开始时重置。我希望能够添加余额或成为外卖余额(有点像实际的银行)。在这段代码中,我使用了 2 个类(Minibank 和 Function)。有谁知道我能做些什么来解决这个问题? (抱歉代码乱码)

import java.util.*; //import everything
import java.lang.*;
public class MiniBank extends Function {

public static void main(String[] args) {             
Scanner ask = new Scanner(System.in);

int menu = 3;

        do{          

        System.out.println("1:Deposit");
        System.out.println("2:Withdraw");
        System.out.println("3:Check Balance");
        System.out.println("4:Exit");


              switch (menu){
            case 1:
             Function Deposit = new Function() {};; 
                Deposit.Deposit(ask);  
                break;
            case 2:
               Function Withdraw = new Function() {};; 
                Withdraw.Withdraw(ask);
                break;

            case 3:
                Function Howmuch = new Function() {};; 
                Howmuch.Money();
                break;   

            case 4:
                System.out.println("Goodbye");
                System.exit(0);    
        }     
       System.out.println("Select Following Options");

       menu=ask.nextInt(); //menu option
       }while (menu!=4);              
        }
}
import java.util.*;
abstract public class Function{ 
protected double Balance;


public Function(){ 
    //going to add something later
}
public void Deposit(Scanner ask){
    System.out.println("Insert the amount put in");
    double task = ask.nextDouble();
    Balance = Balance + task;
    System.out.println("Account balance: "+ Balance);

}
public void Withdraw(Scanner ask){
    System.out.println("Insert the amount to take out");
    double task = ask.nextDouble();
    Balance = Balance - task;
    System.out.println("Account balance: "+ Balance);
}
public void Money(){
    System.out.println(Balance);
}
}

【问题讨论】:

  • new Function() {};; 正在创建 new 实例(通过匿名子类)。你为什么这样做?
  • 我这样做是为了调用函数。
  • "Nothing" 代码有问题,它正在做它应该做的事情。问题在逻辑之内。正如@ElliottFrisch 提到的,您正在做的是创建该类的新实例,从而重置值。在循环外实例化Function
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已根据 CC BY-SA license 授予 SE 分发内容的不可撤销权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则帖子下方左侧有一个“删除”按钮,但仅在浏览器中,而不是移动应用程序中。

标签: java constructor switch-statement java.util.scanner abstract


【解决方案1】:

您不应为switch 的每个案例创建一个新的“银行”(函数)。此外,您应该创建一个银行。类似的,

MiniBank mb = new MiniBank();
do {
    // ...
    switch (menu) {
    case 1:
        mb.Deposit(ask);
        break;
    case 2:
        mb.Withdraw(ask);
        break;
    case 3:
        mb.Money();
        break;
    case 4:
        System.out.println("Goodbye");
        System.exit(0);
    }
// ...

此外,按照惯例,Java 方法名称应以小写字母开头(您的方法看起来像类)。

【讨论】:

    【解决方案2】:

    您每次都在创建Function 的新实例,这意味着您没有重用Function 中声明的余额字段。您只能使用 Minibank 的一个实例来修复它,如下所示:

    import java.util.*; //import everything
    import java.lang.*;
    public class MiniBank extends Function {
    
    public static void main(String[] args) {             
    Scanner ask = new Scanner(System.in);
    
    Minibank bank = new Minibank(); // This is your object used for depositing and withdrawing
    
    int menu = 3;
    
            do{          
    
            System.out.println("1:Deposit");
            System.out.println("2:Withdraw");
            System.out.println("3:Check Balance");
            System.out.println("4:Exit");
    
    
                  switch (menu){
                case 1: 
                    bank.Deposit(ask);  
                    break;
                case 2:
                    bank.Withdraw(ask);
                    break;
    
                case 3: 
                    bank.Money();
                    break;   
    
                case 4:
                    System.out.println("Goodbye");
                    System.exit(0);    
            }     
           System.out.println("Select Following Options");
    
           menu=ask.nextInt(); //menu option
           }while (menu!=4);              
            }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多