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

Java扫描器验证- Char,int,double,String

樊令秋
2023-03-14

如何为输入的不同类型的数据显示不同的消息?我只希望用户能够输入整数,但如果他们输入其他内容,那么我希望为每种类型提供自定义消息。例如,

  • char:"您无法输入字母,请使用1-10中的数字"
  • 双精度:"您不能输入小数的数字,请使用1-10的整数"
  • string:“请输入1-10的数字”

目前我正在使用这个代码,如果它不是整数,它只允许我显示一条消息

printMenuOption();
if (!sc.hasNextInt()){
    System.out.println("Please enter a number from 1 to 10");
    sc.nextLine();
}else{
    returnDataMenu(sc.nextInt());
}

共有2个答案

傅经业
2023-03-14

按照下面的方法去做,它会解决你的问题,

    while (sc.hasNext()) {
                if (sc.hasNextInt()) {
                    returnDataMenu(sc.nextInt());
                } else if (sc.hasNextLong()) {
                    System.out.println("You can't enter a long number, please use a whole number from 1-10");
                } else if (sc.hasNextDouble()) {
                    System.out.println("You can't enter a number with a decimal, please use a whole number from 1-10");
                } else if (sc.hasNextBoolean()) {
                    System.out.println("You can't enter a boolean, please use a whole number from 1-10");
                } else if (sc.next() != null) {
                    System.out.println("You can't enter a string, please use a whole number from 1-10");
                } else if (sc.nextLine().length() <= 1) {
                    System.out.println("You can't enter a char, please use a whole number from 1-10");
                }
}

java.util.Scanner有许多hasNextXXX方法可用于验证输入。下面的链接对它们进行了概述:

http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html#hasNext(java.lang.String)

马庆
2023-03-14

希望这能帮到你。

Scanner myInput = new Scanner(system.in);

do {
    printMenuOption();
    if (!myInput.hasNextInt()){

        if(myInput.hasNextDouble()){

            System.out.println("You can not use a decimal number!");
            System.out.println("Please try again, choose a number from 1 to 10.");


        }else if(myInput.nextLine().length() <= 1){

            System.out.println("You can not use a character as an entry");
            System.out.println("Please try again, choose a number from 1 to 10.");


        }else if(myInput.nextLine().length() > 1){

            System.out.println("You can not enter a string");
            System.out.println("Please try again, choose a number from 1 to 10.");

        }
        else{

            System.out.println("Please enter a number from 1 to 10");
            userInput = myInput.nextLine();
        }



    }
    else{

        returnDataMenu(myInput.nextInt());
    }

} while (cont == true);
 类似资料:
  • 首先为标题感到抱歉,想不出别的了。我目前正在完成一个关于JetBrains Hyperskill的项目,该项目是一个单位转换器,用户可以在其中转换重量、长度和温度单位。我几乎完成的项目,转换工作很好,但我有一个问题与用户输入。 用户输入由以下部分组成: 因此,用户可以输入如下内容: null null -要转换的数量 -这应该是像“摄氏”和“摄氏度”这样的输入 -随机单词 -这也应该读取输入,如“

  • 我有一个类,它创建多个对象,并将它们放入中,如下所示: 我有一个应用程序,它从控制台扫描输入“add”,如果找到,就调用方法,如下所示: 应用程序应该允许用户输入“add”,但在调用方法后,将出现错误“no line found”。 我猜这是因为方法中的没有关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我该如何修复它? 请注意,这个程序还没有完成,因为我将添加一个出售这些股票的销售方法。这

  • 问题内容: 据我所知,在Java中从文件读取基于字符的数据的两种最常见的方法是使用或。我也知道通过使用缓冲区来避免物理磁盘操作来有效地读取文件。我的问题是: 是否执行以及? 为什么你会选择在反之亦然? 问题答案: 用于从流的内容中解析令牌,而只是读取流,并且不执行任何特殊的解析。 实际上,你可以将传递给作为要解析的字符源。

  • 在Bean验证规范(JSR303和JSR349)和文档中,都没有提到@digits对Double或Float类型的支持。它只说支持以下类型: BigDecimal BigInteger CharSequence 字节、short、int、long及其各自的包装器类型

  • 问题内容: 在Java中,允许以下操作: 在这里,c将保持值“ B”。上面,首先对表达式求值。所以’A’被转换为65,整个表达式的计算结果为66,然后将66转换为’B’,因为我们将值存储在char中。 但是,以下给出了编译时错误: 关于Java如何以不同的方式看待表达式的解释是什么?顺便说一句,以下内容也可以正常工作: 问题答案: 第一个示例(编译)很特殊,因为加法的两个操作数都是文字。 以下是一

  • 我如何解释以下内容: 打印2.29999 打印2.3