循环和放大开关

时间:2013-10-09 04:58:08

标签: java loops menu while-loop switch-statement

我使用NetBeans 7.3编写了此代码。它是一个简单的ATM程序的解释。我的问题是我无法查看两次以上的菜单选项。在第二次重复时我无法切换。我该怎么做才能解决这个问题?

这是我的代码:

public static void main() {

    System.out.println("            ****************************************************" );
    System.out.println("            * Can you please choose which one of the following *" );
    System.out.println("            *   services you want the program to perform by    *" );
    System.out.println("            *    typing down the number of the option below:   *" );
    System.out.println("            *                                                  *" );
    System.out.println("            *       1. Test credit card number.                *" );
    System.out.println("            *       2. Exit.                                   *" );
    System.out.println("            ****************************************************" );

    int choice;
    System.out.print("your choice is: ");
    choice = console.nextInt();
    //while (choice == 1 || choice != 2)
    if (choice == 2) {
        System.out.println("                 *** Please visit us again. ***");
        System.exit(0);        
    } 
}

public static void main(String[] args) {

    int choice; 
    System.out.println("            *****************************************************" );
    System.out.println("            *   Welcome to the credit card number test program  *" );
    System.out.println("            *                                                   *" );
    System.out.println("            *    First we would like to thank you for choosing  *" );
    System.out.println("            *  our program and we hope you will find it useful  *" );
    System.out.println("            *                                                   *" );
    System.out.println("            *  We guarantee you that you will receive the best  *" );
    System.out.println("            *               services in the world.              *" );
    System.out.println("            *****************************************************" );


    System.out.print("your choice is: ");
    choice = console.nextInt();

    switch (choice) {   
        case 1:
        int[][] credit_number = new int [3][16];
        int row;
        int col;
        int sum;
        String statue;

        System.out.println("Please enter 16 number for a credit card: " ); 

        row = 0;
        {    
            for (col = 0; col < credit_number[row].length; col++)
            credit_number[row][col] = console.nextInt();
        }     

      while (choice == 1 || choice != 2)
          main();
      System.out.println();
      break;      

  case 2:
      System.out.println("                 *** Please visit us again. ***");
      System.exit(0);

      default: {
          System.out.println("Warning: Please make sure to choose an available option from the menu.");
          main();
      }
   }
}}

1 个答案:

答案 0 :(得分:1)

你的代码很混乱。 您已经有2个名为main的例程。

具有以下签名的main是您正确的main函数,在启动应用程序时会调用它:

public static void main(String[] args) {

首先调用它。
在此功能中,您呼叫其他main() 让我们将其称为main2以避免混淆。

在main2中,您调用终止程序的exit

所以你的程序只运行两次是完全正确的。

您可以通过使您的程序成为一个理智的方法来解决问题。

  1. 你永远不要重复自己。
  2. 使用有意义的名称。
  3. 让函数返回值。
  4. 请记住,函数本地的变量在该函数之外是不可见的(google + java + scope + variable)
  5. 结构应该是这样的:

    public static void main(String[] args) {
    
      boolean areWeDoneYet = false;
      string ccNumber;
    
      while !(areWeDoneYet) {
        displayMenu();
        int choice = getUserInput();
        switch (choice) {
          case 1: 
            ccNumber = getCreditCardNumber();
            processCreditCardNumber(ccNumber);  
            break;
          case 2:  
            areWeDoneYet = true;
            break; 
          default: 
            displayErrorMessage();
            //waitForUserToConfessHisSins();
            //fineUser();
            //questionMark();
            //dots();
            //profit();
        } //switch 
      } //while
      exit(0);
    }
    

    然后为displayMenu()getUserInput()getCreditCardNumber()displayErrorMessage()创建函数。
    请注意,所有* get *函数必须返回它们应该获得的任何内容。