【问题标题】:How to make sure user doesn't enter letters如何确保用户不输入字母
【发布时间】:2016-01-21 13:12:18
【问题描述】:

在我的程序中,用户必须选择他们想要做的事情,然后点击选项旁边的数字,然后点击回车。

现在我有它,所以任何不是选择的数字都会出错,但现在我想确保如果用户输入字母(例如“fadhahafvfgfh”)它会显示错误

这是我的代码...

import java.util.Scanner;

public class AccountMain {


    public static void selectAccount(){


        System.out.println("Which account would you like to access?");
        System.out.println();
        System.out.println("1 = Business Account ");
        System.out.println("2 = Savings Account");
        System.out.println("3 = Checkings Account");
        System.out.println("4 = Return to Main Menu");

        menuAccount();


    }

    public static void menuAccount(){

        BankMain main = new BankMain();
        BankMainSub sub = new BankMainSub();
        BankMainPart3 main5 = new BankMainPart3();

        Scanner account = new Scanner(System.in);

        int actNum = account.nextInt();

        if (actNum == 1){

            System.out.println("*Business Account*");
            sub.businessAccount();
        }

        else if (actNum == 2){

            System.out.println("*Savings Account*");
            main.drawMainMenu();
        }

        else if (actNum == 3){

            System.out.println("*Checkings Account*");
            main5.checkingsAccount();
        }

        else if (actNum == 4){
            BankMain.menu();

        }

    }
}

【问题讨论】:

    标签: java input user-input


    【解决方案1】:

    您可以为此使用Scanner#hasNextInt()

    if(account.hasNextInt())
      account.nextInt();
    

    如果此扫描器输入中的下一个标记可以使用 nextInt() 方法解释为指定基数中的 int 值,则返回 true。扫描仪不会超过任何输入。

    如果用户没有输入valid,那么你可以说再见,下次见,如下所示。

        int actNum = 0;
        if(account.hasNextInt()) {
            //Get the account number 
            actNum = account.nextInt();
        }
        else
        {
            return;//Terminate program
        }
    

    否则,您可以显示错误消息并要求用户重试有效帐号。

        int actNum = 0;
        while (!account.hasNextInt()) {
            // Out put error
            System.out.println("Invalid Account number. Please enter only digits.");
            account.next();//Go to next
        }
        actNum = account.nextInt();
    

    【讨论】:

    • 我将如何在我的代码中使用它?抱歉,我还是 java 新手
    【解决方案2】:
    Scanner account = new Scanner(System.in);
    int count = 0;
    while (true and count < 3) {
        if (!account.hasNextInt()) {
            int actNum = account.nextInt();
            break;
        } else {
             System.out.println("Enter an integer");
             count++;
             account.next();
        }
    }
    

    【讨论】:

    • 这将永远循环一个错误条件:)。您还需要阅读 account.next() inside loop
    • 现在有更好的了.. :)
    • Err 还是有问题,否则你需要做一个 account.next() 以便它转到 next() 元素。
    • 哦是的.. nextInt() 不会将指针移动到下一个字符...感谢引用.. 将编辑它.. 我的大脑在rusted.. :-\
    【解决方案3】:

    我认为公认的答案是正确的,但我们应该在代码中使用 java 特性,如异常处理

    // 所以我们的代码应该是这样的

    public static void main(String[] args) {
    
        int choice=0;
        Scanner scanner = new Scanner(System.in);
        StringReverse objReverse = new StringReverse();
    
        System.out.println("Menu");
        System.out.println("1.Reverse String");
        System.out.println("2.Exit");
    
        do {
                System.out.println("Enter your choice");
                try {
                    choice = scanner.nextInt();
                    switch(choice) {
    
                         case 1 :
                                System.out.println("Enter the string to reverse");
                                String inputString = new String();
                                inputString = scanner.next();
                                String reversedString = objReverse.reverse(inputString );
                                System.out.println("Reversed String is " + reversedString);
                                break;
    
                         case 2 :
                                System.out.println("Exiting...");
                                return;
    
                         default :
                                System.out.println("Default choice");
                                break;
                   }
                } catch(Exception e) {
                        System.out.println("Please enter valid integer input");
                        scanner.next();
                }
       } while(choice != 2);
    }
    

    【讨论】:

    • @Prashant 我的荣幸兄弟
    【解决方案4】:

    扫描器有一个hasNextInt() 函数,如果下一个标记是整数,则返回真。所以在调用nextInt() 之前验证hasNextInt() 是否为真。如果失败,向用户显示一条消息,要求他输入一个整数。请注意,Integer 不一定需要在您要求的范围内,因此请确保您还有一个最终的 else 以通知用户他输入的数字无效。

    提示:使用 Switch Case。

    【讨论】:

      【解决方案5】:

      您可以使用Scanner.hasNextInt()Integer.parseInt()

      Scanner account = new Scanner(System.in);
      String actNum = account.next();
      try {
          Integer.parseInt(actNum);
      } catch(ParseException ex) {
          sysout("please enter only numeric values")
      }
      

      【讨论】:

      • actNum 已经是int,您的解析代码将永远不会被调用,因为首先会在nextInt 引发异常
      猜你喜欢
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多