2013-02-10 1 views
0

У меня возникли проблемы с возвратом в главное меню. После внесения в банк я хочу снова показать главное меню пользователю, но я не знаю, в чем проблема. Чтобы определить мою точную проблему. После внесения в банк главное меню должно появиться снова, когда я вводим «Y» и нажимаю кнопку «ok», но он не появляется.как вернуться в главное меню?

Вот моя программа.

Базовый класс:

import java.io.*; 
import java.util.*; 
public class BankAccount  
{ 

    public BankAccount(double b, String n) 
    { 
     double balance = b; 
     String 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; 
    } 

    double balance; 
    String name; 

} 

испытаний Класс:

import java.awt.Component; 
import java.io.*; 
import javax.swing.JOptionPane; 
import java.util.*; 

public class Tester { 
    private static String name; 
    private static double bal; 
    private static double withdraw; 

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


     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); 


     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]); 


     if (rc == 0) { 
      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 = "y"; 
      while (proceeds.equalsIgnoreCase("y")) 
      do { 
       proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
      } while (proceeds.equalsIgnoreCase("Y")); 

      System.exit(0); 
     } 


     if (rc == 1) { 
      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.balance); 
      } else { 
       JOptionPane.showMessageDialog(null, "Sorry, you have insufficient funds for this operation. Your existing balance is $" + myAccount.balance); 
      } 

      String proceeds = "y"; 
      while (proceeds.equalsIgnoreCase("y")) 
      do { 
       proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
      } while (proceeds.equalsIgnoreCase("Y")); 

      System.exit(0); 
     } 

     if (rc == 2) { 
      JOptionPane.showMessageDialog(null, "The balance in the account of " + name + " with the pin number " + num + " is $" + bal); 



      String proceeds = "y"; 
      while (proceeds.equalsIgnoreCase("y")) 
      do { 
       proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
      } while (proceeds.equalsIgnoreCase("Y")); 

      System.exit(0); 
     } 


     if (rc == -1) { 
      System.exit(0); 
     } else { 

      JOptionPane.showMessageDialog(null, "\nThank you. Have a good day!"); 
      System.exit(0); 
     } 


    } 
} 
+0

Пожалуйста, используйте последовательный и правильный формат отступа и кода. –

+0

проблема в том, как вернуться в главное меню, используя do/while. –

+0

@AsakaGhurl, пожалуйста, просто взгляните на мой пост. Я заработал для вас. пожалуйста, не стесняйтесь задавать какие-либо вопросы или улучшать код –

ответ

1

Я пытаюсь реорганизовать ваш класс, чтобы он был более ясным. Я также делаю некоторые небольшие изменения для повышения производительности. Однако я готов принять все предложения или критики.

BankAccount класс

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; 
    } 

} 

тестер класс

import java.awt.HeadlessException; 
    import java.util.Scanner; 

    import javax.swing.JOptionPane; 

    public class Tester { 

     private static String name; 

    private static double withdraw; 

    private static int pin; 

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

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

     String 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(myAccount, rc); 
    } 

    private static int getRC() throws HeadlessException { 
     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(BankAccount myAccount, int rc) throws HeadlessException, NumberFormatException { 
     switch(rc) { 
      case 0: 
       processDeposit(myAccount, rc); 
       break; 
      case 1: 
       processWithdraw(myAccount, rc); 
       break; 
      case 2: 
       processBalance(myAccount, 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(BankAccount myAccount, int rc) throws HeadlessException, NumberFormatException { 
     double deposit; 
     String dep = JOptionPane.showInputDialog("How much would you like to deposit?\n\t$ "); 
     deposit = Double.parseDouble(dep); 
     myAccount.deposit(deposit); 

     JOptionPane.showMessageDialog(null, "You have deposited $" + dep + " into the account of " + name); 
     processManager(myAccount); 
    } 

    private static void processWithdraw(BankAccount myAccount, int rc) throws HeadlessException, NumberFormatException { 
     double withdraw; 
     String with = JOptionPane.showInputDialog("How much would you like to withdraw?\n\t$"); 
     withdraw = Double.parseDouble(with); 
     if(myAccount.getBalance() - 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()); 
     } 
     processManager(myAccount); 
    } 

    private static void processBalance(BankAccount myAccount, int rc) throws HeadlessException { 
     JOptionPane.showMessageDialog(null, "The balance in the account of " + name + " with the pin number " + pin 
       + " is $" + myAccount.getBalance()); 
     processManager(myAccount); 
    } 

    private static void processManager(BankAccount myAccount) throws HeadlessException, NumberFormatException { 
     int rc; 
     String proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
     if(proceeds.equalsIgnoreCase("y")) { 
      rc = getRC(); 
      processor(myAccount, rc); 
     } else { 
      processExit(-1); 
     } 
    } 
} 

Ваша ошибка в том, что ваша структура не была хорошей, и вам не нужно делать, пока совершенно в способе снять.
В моем посте: в методе processWithdraw() я вызываю метод getRc(), который представляет главное меню и возвращает значение выбранной кнопки. на конце i passe возвращаемое значение на processor()

+0

thnx ... , но моя проблема все еще не решена. –

+0

мне нужно, как вернуться в главное меню после сдачи на хранение –

+0

все еще получил ошибку ... –

0

Пожалуйста проверьте и внимательно. Почему вы используете две петли для последующей проверки?

Я думаю, что это лучше:

if (rc == 0) { 
     do { 
      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)"); 
      } while (proceeds.equalsIgnoreCase("Y")); 

      System.exit(0); 
} 

Я сказал, что вы используете две петли, потому что ваш код:

while (proceeds.equalsIgnoreCase("y")) 
      do { 
       proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
      } while (proceeds.equalsIgnoreCase("Y")); 

Просто означает

while (proceeds.equalsIgnoreCase("y")) { 
      do { 
       proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
      } while (proceeds.equalsIgnoreCase("Y")); 
} 

которые являются два разные вложенные петли.

+0

все еще ошибка на части «пока». –

+0

Я не могу вернуться в главное меню после сдачи на хранение .. почему? –

0

Что вы пытаетесь сделать с помощью этих нескольких строк?

while (proceeds.equalsIgnoreCase("y")) 
     do { 
      proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)"); 
     } while (proceeds.equalsIgnoreCase("Y")); 

Кроме того, я не уверен, я понимаю, почему вы думаете, что должно отображаться в меню запуска, где вы все блоки заканчиваются System.exit(0) ... это весь ваш код?

+0

Я хочу вернуться в главное меню, используя это, но я не могу хорошо, я действительно не знаю, как :( –

+0

Что вы называете «главным меню» в этом случае? System.exit (0) просто отключит ваше приложение Это то, что вы хотите? Вы действительно * достигаете * линии System.exit (0), или вы застреваете в петлях «продолжается» (что вы, вероятно, должны исправить, как объясняется Desolator?) – phtrivier

+0

Что вы имеете в виду «ошибка в« частике »?» Извините, но я не уверен, что получаю то, что происходит, извините ... Если вы замените двойной цикл на один цикл, что произойдет? «У вас есть выходы? – phtrivier

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