public class HugeInteger {
private final int SIZE = 40;
private int[] bigArray = new int[SIZE];
public void parse (String str) {
String[] s = str.split("\\D+");
for (int i = 0; i < s.length; i++) {
bigArray[i] = Integer.parseInt(s[i]);
}
}
public void printArray() {
for (int i = 0; i < SIZE; i++) {
System.out.print(bigArray[i]);
}
}
}
public class IntegerTest {
public static void main(String[] args) {
String userStr = "";
Scanner input = new Scanner(System.in);
System.out.print("Enter first HugeInteger: ");
userStr = input.nextLine();
HugeInteger big = new HugeInteger();
big.parse(userStr);
big.printArray();
}
}
基本上,如果我输入一个长度超过10位的字符串,它会抛出异常并说:
线程“main”中的异常java.lang.NumberFormatException:用于输入 字符串:“12345367899”at java.lang.NumberFormatException.forInputString(未知来源)at java.lang.Integer.parseInt(未知来源)at java.lang.Integer.parseInt(未知来源)at HugeInteger.parse(HugeInteger.java:9)at IntegerTest.main(IntegerTest.java:13)
不确定这意味着什么或如何解决它。谢谢!
答案 0 :(得分:0)
如您所知int
数据类型是32-bit
签名的二进制补码整数和
int
范围是-2^31
到2^31 - 1
,即-2147483648
到2147483647
我认为你可以使用long
作为64-bit
签名的二进制补码整数。
答案 1 :(得分:0)
我刚被告知我必须使用charAt()来解析数组。这样的事情呢?
public void parse (String str) {
for (int i = 0; i < str.length(); i++) {
int x = str.charAt(i);
bigArray[i] = x;
}
}
答案 2 :(得分:0)
如果您的输入允许超出 int 范围的数字,则应使用long。
以下代码示例:
class HugeInteger {
private final int SIZE = 40;
private long[] bigArray = new long[SIZE];
public void parse (String str) {
String[] s = str.split("\\D+");
for (int i = 0; i < s.length; i++) {
String x = s[i];
bigArray[i] = Long.parseLong(x);
}
}
public void printArray() {
for (int i = 0; i < SIZE; i++) {
System.out.print(bigArray[i]);
}
}
}
public class IntegerTest {
public static void main(String[] args) {
String userStr = "";
Scanner input = new Scanner(System.in);
System.out.print("Enter first HugeInteger: ");
userStr = input.nextLine();
HugeInteger big = new HugeInteger();
big.parse(userStr);
big.printArray();
}
}