Java 如何使用公共静态主void(字符串args[])检查用户输入是否超过Int限制

Java 如何使用公共静态主void(字符串args[])检查用户输入是否超过Int限制,java,int,Java,Int,这就是我到目前为止所说的: public class CheckNum { public static void main (String args[]) { for (int i = 0; i < args.length; i++) { if (Integer.parseInt(args[i]) > Integer.MAX_VALUE) { System.out.println("Input valu

这就是我到目前为止所说的:

public class CheckNum {

    public static void main (String args[]) {
        for (int i = 0; i < args.length; i++) {
            if (Integer.parseInt(args[i]) > Integer.MAX_VALUE) {
                System.out.println("Input value is too big");
            }

        }
    }

}
公共类CheckNum{
公共静态void main(字符串参数[]){
对于(int i=0;iInteger.MAX_值){
System.out.println(“输入值太大”);
}
}
}
}
但是,当我在linux中输入一个大于最大整数值的数字时,如下所示:

java CheckNum 1234567890


我在parseInt得到一个NumberFormats错误,我猜这是因为在与Integer的最大值进行比较之前,无法将太大的数字转换为整数。是否有其他方法仅使用字符串args[]上的输入来检查输入的数字对于整数是否太大

只需捕获您得到的异常

public static void main (String args[]) {
    for (int i = 0; i < args.length; i++) {
        try{
            Integer.parseInt(args[i]);
        catch(NumberFormatException e){
            //e.printStackTrace();
            System.out.format("Input %d is incorrect : %s%n", i, args[i]);
        }

    }
}
publicstaticvoidmain(字符串参数[]){
对于(int i=0;i

它将打印不正确的输入索引。

您可以使用异常来验证用户输入了错误的值。要知道问题的确切原因有点困难,因为它可能是由许多因素造成的。最简单(也是最好的解决方案)的方法是:

try {
  int result=Integer.parseInt(args[i]);
} catch (NumberFormatException e){
   System.out.println("Input value is not an integer [-2147483648 : 2147483647 ]");
}

如果您坚持要了解问题,则需要进行其他检查。但您需要使用arg[0]作为字符串,并执行一些字符串操作。例如,如果您尝试将其强制转换为long,它可能会比long更大。或者它可能包含一个字母,甚至类似于@#$^!@T!@$^。因此,您需要检查它是否只包含数字,检查它是否为浮点值,例如,尝试将其强制转换为biginger。但所有这些测试都是无效的没有意义,因为它们仍然会导致相同的问题-输入错误:)

您可以按照@AxelH的建议捕获异常,或者尝试下面的建议

您可以将输入强制转换为Long,然后检查该值是否大于整数的最大值

public static void main(String[] args) {
        Long l = Long.parseLong(args[0]);
        if(l > Integer.MAX_VALUE){
            System.out.println("Value can't be handled by Integer");
        } else{
            System.out.println("Proper Integer");
        }

    }
请注意,如果无法将输入解析为Long,您可能仍然会收到NumberFormatException

如果输入可以变大,则使用
biginger bi=newbiginger(args[0]);

如果您想了解如何对BigInteger进行操作的详细信息
请参阅BigInteger的文档

try-catch(NumberFormatException)
args
是一个
String[]
,因此这取决于您要检查的值。这与它来自cmd这一事实无关。您可以使用
String s=“1234567890”;
然后解析它,它是一样的。它起作用了!谢谢!你不会的。无论检查是在
公共静态void main(String[]args)
还是其他地方都是完全不相关的。@ok但是如果这是回答你的问题,我已经在回答中发布了解决方案,不要忘记接受解决方案(当然,如果它有帮助的话)