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但是如果这是回答你的问题,我已经在回答中发布了解决方案,不要忘记接受解决方案(当然,如果它有帮助的话)