当前位置: 首页 > 知识库问答 >
问题:

问题错误检查代码

屈晨
2023-03-14
import java.util.*;

public class AccountClient {

public static void main(String[] args)  {
    @SuppressWarnings("resource")
    Scanner input = new Scanner(System.in);
    boolean infiniteLoop = true;
    boolean invalidInput;
    int id = 0;

    // Create array of different accounts
    Account[] accountArray = new Account[1000000];
    //Initialize each account array with its own unique id and a starting account balance of $100
    for (int i = 0; i < accountArray.length; i++) {
        accountArray[i] = new Account("name", i, 100);
    }
    do {    
        try {       
            //inner loop to detect invalid Input
            do {
                invalidInput = false;
                System.out.print("Enter an id: ");

                if (!(input.hasNextInt())) {
                    System.out.println("Invalid input. Please enter a numeric id between 0 and 999999, no letters or symbols allowed. Try again.");
                    invalidInput = true;
                    input.nextLine();
                }


                else {
                    id = input.nextInt(); 
                    accountArray[id].setNumberOfTimesOpened(accountArray[id].getNumberOfTimesOpened() + 1);
                    input.nextLine();
                    if (accountArray[id].firstTimeAccount()) {
                        System.out.print("Please enter a name to register to this account: ");
                        String name = input.nextLine();
                        accountArray[id].setName(name);
                    }
                }

            } while (invalidInput);
            boolean exit;
            do {
                exit = false;
                boolean notAnOption;
                int choice;
                do {
                    notAnOption = false;
                    System.out.print("\nMain Menu\n1: check balance\n2: withdraw\n3: deposit\n4: view transaction history\n5: exit\nEnter a choice: ");
                    choice = input.nextInt();
                    if (choice < 1 || choice > 5) {
                        System.out.println("Sorry, " + choice + " is not an option. Please try again and enter a number between 1 and 5 (inclusive).");
                        notAnOption = true;
                    }
                } while(notAnOption);
                switch (choice) {
                case 1: System.out.printf("The balance for your account is $%.2f\n", accountArray[id].getBalance());
                    break;
                case 2: {
                    boolean withdrawFlag;
                    do {
                        System.out.print("Enter the amount you would like to withdraw: ");
                        double withdrawAmount = input.nextDouble();
                        input.nextLine();
                        if (withdrawAmount > accountArray[id].getBalance()) {     
                            System.out.printf("Sorry, you only have an account balance of $%.2f. Please try again and enter a number at or below this amount.\n", accountArray[id].getBalance());
                            withdrawFlag = true;
                        }
                        else {
                            accountArray[id].withdraw(withdrawAmount);
                            System.out.printf("Thank you. You have successfully withdrawn $%.2f from your account.\n", withdrawAmount);
                            withdrawFlag = false;
                        }
                    } while (withdrawFlag);
                }

                    break;
                case 3: {
                    System.out.print("Enter the amount you would like to deposit: ");
                    double depositAmount = input.nextDouble();
                    input.nextLine();
                    accountArray[id].deposit(depositAmount);
                    System.out.printf("Thank you. You have successfully deposited $%.2f into your account.\n", depositAmount); 
                    }
                    break;
                case 4: {
                    accountArray[id].accountSummary();
                    }
                    break;
                case 5: {
                    System.out.println("returning to the login screen...\n");
                    exit = true;
                    }
                    break;
                }

            } while (exit == false);

        }

        catch (ArrayIndexOutOfBoundsException ex1) {
            System.out.println("Invalid input. Please enter an id between 0 and 999999 (inclusive).");  
            input.nextLine();
        }

        catch (InputMismatchException ex2) {
            System.out.println("Sorry, invalid input. Please enter an id between 0 and 999999 (inclusive) with no letters or symbols.");
            input.nextLine();
        }

    } while (infiniteLoop);

  } 

}

大家好,我有一个模拟ATM机的程序。它使用我创建的account类,在用户输入0到999999之间的id后,为用户生成一个帐户。然后,他们可以执行各种任务,如查看余额、取款、存款等。不过,我在检查程序时遇到了一个问题。它编译时没有错误,并且第一次通过循环时,它工作得非常完美。但是,如果他们点击退出并输入另一个无效id,它会显示两次无效输入消息。我复制了下面发生的事情的控制台。有人能给我解释一下为什么会这样,以及如何修复它吗。我也是java新手,如果有人能告诉我一种更好的错误检查方法,我将不胜感激。现在,如果他们输入的int值不在0到999999之间,我必须有一个单独的ArrayIndexOutofBoundsException来捕捉错误。这似乎效率低下。是否有方法可以检查他们是否输入了数值,如果输入了,是否再次检查他们是否输入了介于0和999999之间的数值?谢谢

输入一个id:f

输入无效。请输入介于0和999999之间的数字id,不允许使用字母或符号。再试一次。

输入id: 5

请输入要注册到此帐户的名称:Bob

主菜单

1:核对余额

2:退出

3:押金

4:查看交易历史记录

5:退出

输入一个选项:5

返回登录屏幕...

输入一个id:f

输入无效。请输入介于0和999999之间的数字id,不允许使用字母或符号。再试一次。

输入id:输入无效。请输入介于0和999999之间的数字id,不允许使用字母或符号。再试一次。

输入一个id:

共有1个答案

钱经赋
2023-03-14

我没有从任何人那里得到任何帮助,但是经过几个小时的沮丧,我意识到这是因为我在要求用户选择一个选项后没有input.nextLine()。这导致扫描仪没有被清除,并且导致语句在被清除之前被打印了两次,在我开始时的内部循环中。一旦我添加了input.next线(),它就工作正常了。

 类似资料:
  • 我为跳棋游戏创建了两个类。一个是木板,另一个是碎片。我所面临的困难是,对于这些碎片,我似乎无法让它们移动,也无法让它们正确地停留在那个位置,事实上,由于我不了解这里到底出了什么问题,我无法再前进了。有人能纠正我做错了什么吗。 这是拼图课

  • 我使用IDEA 2017.2.5在Scala中使用SBT插件进行开发。我无法让Scala的代码检查正常工作。我在有效的Scala代码上发现了许多看似任意的错误,例如“无法解决符号”或“类型不匹配”。此外,我肯定使用的许多导入被标记为未使用和灰色。 例如,以下代码解析为“world”,但产生“Cannot resolve symbol toLowerCase”错误: 你好,世界。拆分(“,”)。最后

  • 我得到了这个错误时启动检查风格分析在Spring引导应用程序: 代码: 有什么帮助吗?

  • 了解如何在 Adobe Dreamweaver 中使用 linting 检查 HTML、CSS 和 JS 文件。在“输出”面板中查看错误和警告并通过一次单击跳转到出错的代码行。 无论您是新手还是经验丰富的程序员,您的代码中都难免会因为疏忽或缺乏知识而出现错误。当网页或网页的一部分看上去不符合您的预期时,您将不得不调试代码,以查找任何语法或逻辑错误。调试可能是一个极其艰苦和耗时的过程,尤其是实施项目

  • 对于我的刽子手游戏,我想有一堆错误信息来检查输入的不止一个字母,猜测同一个字母两次,等等。到目前为止我的完整代码: 我遇到的最大问题是检查用户是否输入了相同的字母两次。所以你只能猜一次字母表中的一个字母。此外,它检查用户输入的多个字母是否有错误的代码,我相信,因为如果我不希望它将这些字母添加到猜测字母框中,它会以任何方式添加这些字母。(即,用户猜测“hf”,在猜测的字母中出现“hf”,在这里它应该

  • 我想做的每件事都成功了,现在是最后一部分,我需要检查某个id的学生是否有某种疫苗,结果应该是真的或假的。我知道我必须使用ListofFos。contains():'但我不知道如何使用它,也不知道在哪里使用它。