Java 如何验证在整数数据类型中输入的非整数?

Java 如何验证在整数数据类型中输入的非整数?,java,validation,Java,Validation,我得开一家商店,里面有要买的东西。选择商品后,我会提示用户输入他们想要购买的商品数量 // 'input' is my Scanner object int quantity; quantity = input.nextInt(); 如果用户输入非整数(即十进制、字符…),则会中断程序。 是否有一种方法可以验证此非整数输入 谢谢当然,接受字符串值而不是int,检查是否可以将该字符串值解析为int,如果可以,然后执行此操作。如果不是,则发送一条消息,说明随后输入的值必须是一个数字 这可以在一个w

我得开一家商店,里面有要买的东西。选择商品后,我会提示用户输入他们想要购买的商品数量

// 'input' is my Scanner object
int quantity;
quantity = input.nextInt();
如果用户输入非整数(即十进制、字符…),则会中断程序。 是否有一种方法可以验证此非整数输入


谢谢

当然,接受字符串值而不是int,检查是否可以将该字符串值解析为int,如果可以,然后执行此操作。如果不是,则发送一条消息,说明随后输入的值必须是一个数字

这可以在一个while循环中完成

import java.util.Scanner;

public class ScannerInputInt {

    public static void main(String... args) {

        Scanner in = new Scanner(System.in);

        Integer input = null;

        do {

            System.out.println("Please enter number: ");

            String s = in.nextLine();

            try {

                input = Integer.parseInt(s);

            } catch (NumberFormatException e) {

                System.out.println("ERROR: " + s + " is not a number.");
            }

        } while (input == null);
    }
}

如果您不想使用异常方法。你可以试试这个

这段代码将继续询问用户输入,直到用户输入正确的输入

System.out.print("Enter quantity: ");
Scanner input = new Scanner(System.in);
boolean isInt = input.hasNextInt(); // Check if input is int
while (isInt == false) { // If it is not int
   input.nextLine(); // Discarding the line with wrong input
   System.out.print("Please Enter correct input: "); // Asking user again
   isInt = input.hasNextInt(); // If this is true it exits the loop otherwise it loops again
}
int quantity = input.nextInt(); // If it is int. It reads the input
System.out.println("Quantity: " + quantity);
input.close();
输出:

Enter quantity: 12.2
Please Enter correct input: 12.6
Please Enter correct input: s
Please Enter correct input: s6
Please Enter correct input: as
Please Enter correct input: 2
Quantity: 2

我认为这是一种稍微好一点的方法,因为我认为用异常控制程序流是一种不好的做法,当有其他东西可以使用时应该避免。

我建议阅读:
nextInt()
float、byte等在从数据流读取时非常好,但是由人工输入的用户输入是相当不可预测的。通常,您必须将所有内容都读取为字符串,然后验证字符串是否代表您想要的内容。@StephenP通常我同意您的看法,但即使是在数据流的情况下,我也建议您使用字符串值,然后尝试将其转换为所需的类型。信任他人代码的伤痕是漫长而深刻的。在尝试调用
nextInt
@hooknc之前,请使用
hasNextInt()
。一、 事实上,我从未使用过
java.util.Scanner
“检查是否可以将该字符串值强制转换为int”,这是永远无法完成的。调用
Integer.parseInt
不是强制转换<代码>输入=(整数)s将是一个公平的选择。更改了措辞。。。