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

时间:2017-01-31 23:48:34

标签: java

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

这就是我的程序:

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 个答案:

答案 0 :(得分:1)

弃掉线路使用

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既不是正面也不是负面。

答案 1 :(得分:0)

    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值以外的任何内容,则应显示“请输入整数值”。 如果输入中的任何令牌包含非整数值,则循环将中断,并且还会打印一条消息“请输入整数值”。