1

このコードは、NetBeans 7.3 を使用して作成しました。これは単純な ATM プログラムの説明です。私の問題は、メニュー オプションを 2 回しか表示できないことです。2回目に繰り返すと、スイッチを切り替えることができません。この問題を解決するにはどうすればよいですか??

これは私のコードです:

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();
      }
   }
}}
4

1 に答える 1

1

あなたのコードは混乱しています。という名前の 2 つのルーチンがありますmain

次のシグネチャを持つメインは、アプリケーションの起動時に呼び出される適切なメイン関数です。

public static void main(String[] args) {

したがって、これが最初に呼び出されます。
この関数内main() で、混乱を避けるために、もう一方を main2 と呼びましょう。

main2 ではexit、プログラムを終了する呼び出しを行います。

したがって、プログラムが 2 回しか実行されないのは正しいことです。

プログラムを正常なものにすることで問題を解決できます。

  1. 決して繰り返してはいけません。
  2. 意味のある名前を使用してください。
  3. 関数が値を返すようにします。
  4. 関数にローカルな変数は、その関数の外では見えないことに注意してください (google +java +scope +variable)

構造は次のようになります。

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 * 関数は、取得するはずのものをすべて返さなければならないことに注意してください。

于 2013-10-09T05:23:22.303 に答える