2013-02-10 3 views
2

Я хочу снять деньги после внесения некоторых, но то, что я получаю, является ошибкой. например, я депонирую 100, а после этого хочу снять 90, но все, что у меня есть, - это ошибка. Другой - после внесения 100, я хочу напечатать текущий баланс, но он печатает (0) ноль. Зачем? пожалуйста помоги.Expriment с 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

Просто совет - попробуйте сделать четкий, более соответствующий заголовок вопроса, чтобы привлечь больше людей, чтобы попытаться и ответ. –

+0

Какая ошибка вы получаете? –

+0

sirAndrewMartin, сэр, я думаю, что я могу сделать мой вопрос более ясным, если я отправляю всю свою программу, это то, что я думаю, что^__^ @GuillaumePolet сэр, это ошибка: пробег: Исключение в потоке «основной» 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 –

ответ

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

как я могу поблагодарить вас, сэр. О, мой бог, я делал это в течение двух дней ... большое спасибо. –

+0

добро пожаловать. Примите ответ. – vels4j

1

Вы объявляете новый экземпляр BankAccount, вместо того, чтобы использовать статическую переменную:

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

Огромное спасибо, еще, когда я ставлю 100 и попытаюсь снять 90, все еще получил ошибку, почему? –

Смежные вопросы