如何添加两个不同长度的int数组?

时间:2013-12-18 19:38:36

标签: java arrays if-statement for-loop int

我一直在开发一个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,它表示有一个数组超出界限错误。

2 个答案:

答案 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)。它将更容易实现。