解析大量数字时出现NumberFormatException?

我知道这可能不是最有效的编码方式,但这是我到目前为止所掌握的方法,并且在数字变得很大之前一直有效。该代码应从文件中读取2个数字,例如“ 052”和“

61”。然后,它应该按从大到小的顺序对第一个数字进行排序,以使该数字尽可能大,而从最小到大个数的第二个数字,则使其尽可能小。(520&16)然后打印两者的差值,在这种情况下为504。

其中两个数字是“ 3827367453723784675745843783623672348745389734268374687”和“

1682761482512674172712635416571265716235471625176235741”。从最大到最小,从最小到最大,对数字进行排序可以正常工作,但是当我尝试将其解析为整数时,NumberFormatException会引发a。我认为是因为该数字太大而无法存储到一个中,int所以我尝试解析为一个,Long但是导致了相同的错误。

我所做的是读取数字Strings,然后创建了一个String数组,将每个数字存储在单独的索引中。然后我创建了一个int数组,除了整数形式以外,我几乎拥有相同的数组String。然后,我对int数组进行了排序。然后,我创建了另一个String存储新排序的数字,然后尝试解析它String,这就是引发异常的地方。

有什么建议?

import java.io.*;    

import java.util.*;

import java.text.*;

import static java.lang.System.*;

public class BigDif

{

public static void main(String[] args) throws IOException

{

Scanner scan = new Scanner (new File ("BigDif.dat"));

int numRuns = scan.nextInt();

scan.nextLine();

for (int i = 0; i < numRuns; i++)

{

String firstNum = scan.nextLine();

String secondNum = scan.nextLine();

String[] firstNum2 = new String[firstNum.length()];

String[] secondNum2 = new String[secondNum.length()];

int[] firstNum3 = new int[firstNum.length()];

int[] secondNum3 = new int[secondNum.length()];

int big = 0;

int notBig = 0;

String firstNum4 = null;

String secondNum4 = null;

int firstNum5 = 0;

int secondNum5 = 0;

for (int j = 0; j < firstNum.length(); j++)

{

firstNum2[j] = Character.toString(firstNum.charAt(j));

}

for (int j = 0; j < secondNum.length(); j++)

{

secondNum2[j] = Character.toString(secondNum.charAt(j));

}

for (int j = 0; j < firstNum2.length; j++)

{

firstNum3[j] = Integer.parseInt(firstNum2[j]);

secondNum3[j] = Integer.parseInt(secondNum2[j]);

}

Arrays.sort(firstNum3);

Arrays.sort(secondNum3);

for (int m = 0; m < firstNum3.length; m++)

{

if (m == 0)

firstNum4 = (Integer.toString(firstNum3[m]));

else

firstNum4 = (Integer.toString(firstNum3[m]))+ firstNum4;

}

for (int m = 0; m < secondNum3.length; m++)

{

if (m == 0)

secondNum4 = (Integer.toString(secondNum3[m]));

else

secondNum4 += (Integer.toString(secondNum3[m]));

}

firstNum5 = Integer.parseInt(firstNum4); //the exception is thrown here

secondNum5 = Integer.parseInt(secondNum4);

if (firstNum5 >= secondNum5)

{

big = firstNum5;

notBig = secondNum5;

}

else

{

big = secondNum5;

notBig = firstNum5;

}

out.println(big - notBig);

}

}

}

回答:

3827367453723784675745843783623672348745389734268374687也太长了。使用BigInteger,它允许任意大整数。

以上是 解析大量数字时出现NumberFormatException? 的全部内容, 来源链接: utcz.com/qa/406567.html

回到顶部