Java 大输入的数字格式异常

Java 大输入的数字格式异常,java,netbeans,biginteger,numberformatexception,Java,Netbeans,Biginteger,Numberformatexception,对于某些输入,此代码工作正常。 但是我得到了一个更高输入值的数字格式,比如1000000。 输入值(s[]的取值范围为1-2000000 原因可能是什么 import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args)

对于某些输入,此代码工作正常。 但是我得到了一个更高输入值的数字格式,比如1000000。 输入值(s[]的取值范围为1-2000000 原因可能是什么

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */

       try
        {
         BufferedReader read = new BufferedReader(new InputStreamReader(System.in));

         int no=Integer.parseInt(read.readLine());

         String s[]=read.readLine().split(" ");

         int result=0;

         for(int i=0; i<no; i++)
         {
             result+= Integer.parseInt(s[i]);
             if(result<0)
                 result=0;
         }
         System.out.println(result);

        }
        catch(IOException e)
       {
           System.out.println(e.getMessage());
       }
    }
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共类解决方案{
公共静态void main(字符串[]args){
/*在此处输入代码。从STDIN读取输入。将输出打印到STDOUT。您的类应命名为Solution*/
尝试
{
BufferedReader read=新的BufferedReader(新的InputStreamReader(System.in));
int no=Integer.parseInt(read.readLine());
字符串s[]=read.readLine().split(“”);
int结果=0;

for(int i=0;i在for循环中,您输入的第一个数字是数组的大小。这就是到目前为止您的逻辑。除非您实际手动加载2000000个数字(或复制/粘贴),否则这将抛出
ArrayIndexOutOfBoundsException

如果输入非数字作为第二个输入,或输入大于
整数.MAX_值
(2147483647)或小于
整数.MIN_值
(-2147483648),则会出现
数字格式异常

输入如下内容:

1000000
2 1 2 1 2 1 /*... 999990 digits later ...*/ 2 1 2 1
使程序正确终止。这是我使用的输入文件,如果有人需要它:

该程序是通过命令promt手工编译和运行的,比如:
java Solution

编辑:我刚刚记得数组中的输入值可能高达2000000。您必须使用
biginger
来保存一个
结果
值,该值可能高达2000000^2。

我同意@lzmaki。 对于你的价值,我没有任何数字形式的例外。 但是,我得到了ArrayIndexOutofBoundException,当我这样尝试时,它实际上是由StackOverFlow引起的:

1000000
1 2 3
then enter
与当时一样,系统认识到其堆栈中没有足够的内存来保存如此大量的数据

我得到了以下情况的NumberFormatException:

1000000
enter twice
因为系统没有获取非数字格式来转换整数格式,即“”


我希望我的分析能帮助您找到错误:)

假设不是缓冲区溢出,任何传递给
Integer的非数字字符。parseInt
将抛出
NumberFormatException
。这包括空格和不可打印的字符,如换行符以及小数点(因为浮点数字不是整数)

调用
read.readLine()
时,您可以尝试使用
.trim()
验证输入,并在传递到
Integer.parseInt()
之前检查空字符串或空字符串。类似于:

     String input = read.readLine();

     if ( input != null )
         input = input.trim();
     if ( input.equals("") )
         throw new IllegalArgumentException("Input must be a number");

     int no=Integer.parseInt( input );

但是,您决定验证第一行的输入,也要验证第二行的输入()打电话。希望你能准确地缩小问题的范围。

你能给出导致异常的输入示例吗?!你能发布异常的堆栈跟踪吗?有任何答案回答了你的问题吗?如果有,请将你最喜欢的答案标记为已解决,如果没有,请提供更多信息。