我一直在开发一个Java实验室,希望我们让用户输入长达50位的两位数字并将它们加在一起。我已经成功地完成了所有事情,除了两个数组的长度不同。我一直在玩代码一段时间,但我一直在做空。任何人都可以看看这个代码并有任何建议吗?谢谢!
int[] number1 = new int[input1.length()];
int[] number2 = new int[input2.length()];
int[] answer = new int[input1.length()];
if(number1.length > number2.length){
number2 = new int[number1.length];
for(int i = 0; i < number2.length - number1.length; i++){
number2[i] = 0;
}
}
if(number2.length > number1.length){
number1 = new int[number2.length];
for(int i = 0; i < number1.length - number2.length; i++){
number1[i] = 0;
}
}
每当我添加时,比如120和12,它表示有一个数组超出界限错误。
答案 0 :(得分:2)
您需要做的第一件事就是将数字转换为int数组。通过将字符串拆分为char数组来实现。然后转换为int数组。然后添加。
String input1 = scanner.nextLine().trim(); <-- get input as String
String input2 = scanner.nextLine().trim();
char[] array1 = input1.toCharArray(); <-- split to char array
char[] array2 = input2.toCharArray();
// convert to int array
int[] intArray1 = new int[array1.length]; <-- declare int array
int[] intArray2 = new int[array2.length];
for (int i = 0; i < array1.length; i++){
intArray1[i] = Integer.parseInt(String.valueOf(array1[i])); <-- convert to int
}
for (int i = 0; i < array2.legnth; i++){
intArray2[i] = Integer.parseInt(String.valueOf(array2[i]));
}
// check which one is larger and add to that one
if (intArray1.length > intArray2.length){
for (int i = 0; i < intArray2.length; i++){
intArray1[i] += intArray2[i]; <-- add values
}
System.out.println(Arrays.toString(intArray1); <-- print largest
} else {
for (int i = 0; i < intArray1.length; i++){
intArray2[i] += intArray1[i];
}
System.out.println(Arrays.toString(intArray2);
}
如果要打印数字表示而不是数组,而不是System.out.println(),请使用此
StringBuilder sb = new StringBuilder();
for (int i : intArray1){
sb.append(String.valueOf(i));
}
System.out.println(sb.toString());
所以123和12将打印出233
答案 1 :(得分:1)
我对你的代码的理解是,你试图预先追加(从头部推)0到较短的数组。看看第一个if-block。 number1的长度大于number2的长度。因此,number2.length - number1.length是否定的。然后,在for循环中,i&lt; number2.length - number1.length总是ture。 (我不熟悉java。我猜数组的长度是一个整数。)而且你仍然需要复制数组的其余部分。
正确的代码应该是,
if(number1.length > number2.length) {
int[] number3 = new int[number1.length];
for(int i = 0; i < number1.length - number2.length; ++i) {
number3[i] = 0;
}
for(int i = 0; i < number2.length; ++i) {
number3[i + number1.length - number2.length] = number2[i];
}
number2 = number3;
}
顺便说一句,第二个if-block应该以类似的方式改变。也许,java为数组对象提供了一个API链接插入(0,0)。它将更容易实现。