2013-02-10 67 views
2

我想在存款后取出一些钱,但是我得到的是一个错误..为什么?例如,我存入100,之后我想撤回90,但是我得到的只是一个错误。另一种是,在存入100后,我想打印当前的余额,但打印(0)为零。为什么?请帮忙。实践与JOptionPane。在执行期间获取Nullpointer异常

主类

import java.awt.HeadlessException; 
import java.util.Scanner; 
import javax.swing.JOptionPane; 

public class Banko{ 

    private static String name; 
    private static double bal; 
    private static double withdraw; 
    private static BankAccount myAccount; 

    public static void main(String args[]) { 

     name = JOptionPane.showInputDialog(null, "Enter your name: "); 

     String num; 
     int pin; 
     num = JOptionPane.showInputDialog("Enter your pin number: "); 
     pin = Integer.parseInt(num); 

     JOptionPane.showMessageDialog(null, "Login Success\n" + "Name : " + name + "\n" + "Pin Number : " + pin); 

     BankAccount myAccount = new BankAccount(withdraw, name); 

     int rc = getRC(); 
     processor(num, rc); 
    } 

    private static int getRC(){ 
     String[] buttons = { "Deposit", "Withdraw", "Print Balance", "Exit" }; 
     int rc = JOptionPane.showOptionDialog(
      null, 
      "What would you like to do?", 
      "Confirmation", 
      JOptionPane.INFORMATION_MESSAGE, 
      0, 
      null, 
      buttons, 
      buttons[2]); 
     return rc; 
    } 

    private static void processor(String num, int rc) { 
     switch(rc) { 
      case 0: 
       processDeposit(num, rc); 
       break; 
      case 1: 
       processWithdraw(num, myAccount, rc); 
       break; 
      case 2: 
       processBalance(num, rc); 
      default: 
       processExit(rc); 
       break; 
     } 
    } 

    private static void processExit(int rc) throws HeadlessException { 
     if(rc == -1) { 
      JOptionPane.showMessageDialog(null, "\nThank you. Have a good day!"); 
      System.exit(0); 
     } 
    } 


    private static void processDeposit(String num, int rc) throws HeadlessException, NumberFormatException { 
     int deposit; 
     String dep = JOptionPane.showInputDialog("How much would you like to deposit?\n\t$ "); 
     deposit = Integer.parseInt(num); 
     JOptionPane.showMessageDialog(null, "You have deposited $" + dep + " into the account of " + name); 

     String proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
     if(proceeds.equalsIgnoreCase("y")) { 
      rc = getRC(); 
      processor(num, rc); 
     } else { 
      processExit(-1); 
     } 
    } 


    private static void processBalance(String num, int rc) throws HeadlessException { 
     JOptionPane.showMessageDialog(null, "The balance in the account of " + name + " with the pin number " + num 
       + " is $" + bal); 

     String proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
     if(proceeds.equalsIgnoreCase("y")) { 
      rc = getRC(); 
      processor(num, rc); 
     } else { 
      processExit(-1); 
     } 
    } 



    private static void processWithdraw(String num, BankAccount myAccount, int rc) throws HeadlessException, NumberFormatException { 
     double withdraw; 
     String with = JOptionPane.showInputDialog("How much would you like to withdraw?\n\t$"); 
     withdraw = Integer.parseInt(num); 
     if(bal - withdraw > 0) { 
      myAccount.withdraw(withdraw); 
      JOptionPane.showMessageDialog(null, "You have withdrawn $" + withdraw + " from the account of " + name 
        + ". The new balance is: " + myAccount.getBalance()); 
     } else { 
      JOptionPane.showMessageDialog(
       null, 
       "Sorry, you have insufficient funds for this operation. Your existing balance is $" 
         + myAccount.getBalance()); 
     } 

     String proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
     if(proceeds.equalsIgnoreCase("y")) { 
      rc = getRC(); 
      processor(num, rc); 
     } else { 
      processExit(-1); 
     } 

    } 
} 

基类:

import java.util.Scanner; 

public class BankAccount { 

    private double balance; 

    private String name; 

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

    public void deposit(double d) { 
     balance += d; 
    } 

    public void withdraw(double w) { 
     balance -= w; 
    } 

    public String nickname() { 
     System.out.print("Enter a new name: "); 
     Scanner kbIn = new Scanner(System.in); 
     String n = kbIn.nextLine(); 
     return n; 
    } 

    public double getBalance() { 
     return balance; 
    } 

    public void setBalance(double balance) { 
     this.balance = balance; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 
+1

只是一些建议 - 尝试进行明确,更重要的问题标题,以吸引更多的人来尝试并回答。 – 2013-02-10 15:27:56

+0

你有什么错误? – 2013-02-10 15:29:23

+0

sirAndrewMartin,先生,我想我可以让我的问题更加清晰的,如果我后我的整个程序,这就是我想^ __^ @GuillaumePolet先生, 这是错误: 运行: 异常线程“main”显示java.lang.NullPointerException \t在Banko.processWithdraw(Banko.java:107) \t在Banko.processor(Banko.java:49) \t在Banko.processDeposit(Banko.java:76) \t在Banko.processor (Banko.java:46) \t at Banko.main(Banko.java:26) Java结果:1 – 2013-02-10 15:32:32

回答

1

良好的实验。只有轻微的错误。

  1. 不必要的变量bal因为你的帐户中有余额本身
  2. 必须使用对象myAccount无处不在。

改变存款

deposit = Integer.parseInt(dep); 
    JOptionPane.showMessageDialog(null, "You have deposited $" 
       + dep + " into the account of " + name); 
    myAccount.setBalance(myAccount.getBalance() + deposit); 

退出

withdraw = Integer.parseInt(with); 
    if (myAccount.getBalance() - withdraw > 0) { 

为getBalance

JOptionPane.showMessageDialog(null, "The balance in the account of " 
    + name + " with the pin number " + num 
    + " is $" + myAccount.getBalance()); 
+0

我怎么能感谢你,先生..哦,我的上帝,我一直在连续两天做这些......非常感谢你。 – 2013-02-10 15:52:05

+0

不客气。接受答案。 – vels4j 2013-02-10 16:17:00

1

您声明而不是使用静态变量新BankAccount例如:

public static void main(String args[]) { 
    // ... 
    myAccount = new BankAccount(withdraw, name); 
    int rc = getRC(); 
    processor(num, rc); 
} 
+0

非常感谢,仍然当我存款100,并尝试撤回90仍然有错误,为什么? – 2013-02-10 15:47:31