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

检查扫描仪输入是否仅为整数

籍永安
2023-03-14

我正在尝试创建一个简单的程序来验证用户的输入是否为正整数。但是,在使用Scanner.hasNextInt()方法时遇到了一个问题。如果输入包含一个整数,比如“5个6”,我的程序将把6读入为一个整数。但是,我希望这样的语句无效,并提示用户只需要输入一个整数值。因此程序将输出“请输入整数值:”。

这就是我的程序的样子:

import java.util.Scanner;

public class InputValidation {
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);

        // INPUT VALIDATION FOR INTEGERS AND POSITIVE NUMBERS
        int input = 0;
        boolean validationSuccessful = false;

        System.out.print("Please enter the input: ");
        do {

            // validate that the input is an integer
            if (in.hasNextInt() == true) {
                input = in.nextInt();
            } else {
                System.out.print("Please enter an integer value: ");
                in.next();
                continue;
            }

            // validate that the input is positive
            if (input < 0) {
                System.out.print("Please print a POSITIVE integer: ");
                continue;
            } else {
                validationSuccessful = true;
            }
            System.out.println("The input is: " + input);
        } while (validationSuccessful == false);

    }
}

编辑:我理解next()与nextLine()之间的区别。然而,我的问题是实际仅为整数的行与包含整数的行的验证方面。

共有2个答案

沙富
2023-03-14
    int input = 0;
    boolean intExist = false; //changes
    boolean validationSuccessful = false;

    System.out.print("Please enter the input: ");
    do {

        // validate that the input is an integer
        if (in.hasNextInt() == true) {
            input = in.nextInt(); 
            intExist = true;  //changes
        } else {
            System.out.print("Please enter an integer value: ");
            in.next();
            continue;
        }

        // validate that the input is positive
     if(intExist){    //changes
        if (input < 0) {
            System.out.print("Please print a POSITIVE integer: ");
            continue;
        } else {
            validationSuccessful = true;
        }
        System.out.println("The input is: " + input);
    }
} while (validationSuccessful == true);   // changes

在写“//changes”的地方,我对您的代码进行了更改。根据我的理解,如果输入包含除int值以外的任何内容,那么它应该显示“请输入一个整数值”。如果输入中的任何令牌包含非整数值,循环将中断,并且它还将打印一条消息“请输入整数值”。

许学真
2023-03-14

若要放弃一行,请使用

in.nextLine();

如果您使用

in.next();

它只读一个单词/标记。(我所说的“词”是指空格之间的任何东西)

我只想接受一个整数值作为输入,而不仅仅是如果行包含一个整数。

int value;
while(true) {
    // a number please.
    try {
         value = Integer.parseInt(in.nextLine());
         if (value > 0)
              break;
         // not positive. 
    } catch (NumberFormatException e) {
         // not an integer
    }
}

注:0既不为正,也不为负。

 类似资料:
  • 在分离标记之前,我试图检查扫描仪是否有多个标记。我目前正在尝试使用扫描仪。hasNext()(我的扫描仪的名字是sc)。如果用户输入“string int”,那么我不想打印“enter age”或“enter grade” 目前,无论输入是什么,我的程序都会跳过if语句。如果我把它拿走!然后,即使输入是一行,这些行也会打印出来。他们似乎也打印后,下一个是我发现奇怪的。我将非常感谢您的帮助!

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 我需要检查用户输入的内容是否正确。如果不是,我需要以msgbox的形式打印错误。 上面的代码似乎不起作用。 有什么想法吗?

  • 问题内容: 因此,我是一名新Java程序员,我试图弄清楚为什么一段代码无法正常工作。我遇到的问题是:“字符串兴趣= input.nextLine();”,它跳过了用户的输入并跳至下一个System.out,因此它仅在控制台中显示“您的个人资料…”在允许用户输入任何数据之前。抱歉,这是一个愚蠢的问题,我很新! 问题答案: 这样说: 其余代码可能与您上面的代码相同。 编辑: 它必须是这样的(我的意思是

  • 因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!

  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。