Java whileloop&;转换

Java whileloop&;转换,java,loops,menu,while-loop,switch-statement,Java,Loops,Menu,While Loop,Switch Statement,我使用NetBeans 7.3编写了这段代码。这是一个简单ATM程序的演示。我的问题是我不能查看两次以上的菜单选项。在第二次重复时,我无法插入开关。我能做些什么来解决这个问题 这是我的代码: public static void main() { System.out.println(" ****************************************************" ); System.out.println("

我使用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();
      }
   }
}}
publicstaticvoidmain(){
System.out.println(“*******************************************************************************”);
System.out.println(“*您可以选择以下哪一个*”);
System.out.println(“*您希望程序通过*执行的服务”);
System.out.println(“*键入下面选项的编号:”);
System.out.println(“**”);
System.out.println(“*1.测试信用卡号。*”);
System.out.println(“*2.Exit.*”);
System.out.println(“*******************************************************************************”);
智力选择;
System.out.print(“您的选择是:”);
choice=console.nextInt();
//while(choice==1 | | choice!=2)
如果(选项==2){
System.out.println(“***请再次访问我们。***”);
系统出口(0);
} 
}
公共静态void main(字符串[]args){
智力选择;
System.out.println(“**********************************************************************************”);
System.out.println(“*欢迎使用信用卡号测试程序*”);
System.out.println(“**”);
System.out.println(“*首先感谢您选择*”;
System.out.println(“*我们的程序,希望您会发现它有用*”;
System.out.println(“**”);
System.out.println(“*我们保证您将收到最好的*”;
System.out.println(“*全球服务。*”);
System.out.println(“**********************************************************************************”);
System.out.print(“您的选择是:”);
choice=console.nextInt();
开关(选择){
案例1:
int[][]信用证编号=新int[3][16];
int行;
int col;
整数和;
弦像;
System.out.println(“请输入信用卡的16号:”);
行=0;
{    
对于(列=0;列
您的代码很混乱。 您有两个名为
main
的例程

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

public static void main(String[] args) {
因此,这将首先被调用。
在这个函数中,您调用另一个
main()
main2以避免混淆

在main2中,调用退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出

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

你可以通过使你的程序正常运行来解决这个问题

  • 你不应该重复你自己
  • 使用有意义的名称
  • 具有返回值的函数
  • 记住,函数的局部变量在该函数外部是不可见的(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*函数必须返回它们应该得到的内容

    您的代码很混乱。 您有两个名为
    main
    的例程

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

    public static void main(String[] args) {
    
    因此,这将首先被调用。
    在这个函数中,您调用另一个
    main()
    main2以避免混淆

    在main2中,调用退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出退出

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

    你可以通过使你的程序正常运行来解决这个问题

  • 你不应该重复你自己
  • 使用有意义的名称
  • 具有返回值的函数
  • 记住,函数的局部变量在该函数外部是不可见的(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*函数必须返回它们应该得到的内容

    我是唯一一个认为这两个重载
    main
    函数的用法很难看的人吗?我正要和@Floris一样发表评论。我不知道足够的java规则来决定第二个主函数是如何或何时从第一个主函数调用的?这肯定是你的问题的根源。不要递归地调用bg main,而是将整个构造放在while循环中——看起来您曾经根据注释行朝这个方向前进过。坚持使用一个主要方法,并将其他方法命名为其他方法。根据需要显式地调用它们。@Floris,是的,你是,我总是调用我所有的函数main。当签名相同时,我称之为main1、main2等。这对我来说很有效。我是唯一的吗