【问题标题】:How do you add two int arrays with different lengths?如何添加两个不同长度的 int 数组?
【发布时间】:2014-01-07 03:35:25
【问题描述】:

我一直在研究一个 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 时,它都会显示数组越界错误。

【问题讨论】:

  • Java 将初始化您的 int 数组,所有值都为零。所以你实际上对你的 for 循环什么都不做。我不确定您要使用代码完成什么,但我建议您重新评估问题并重试
  • 我假设您正在模拟算术。如果用户输入 9 和 9,答案将如何适合大小为 1 的数组?
  • @Bohemian 抱歉,这只是与问题相关的代码部分。我的代码的其余部分可以容纳 9 + 9 以使其等于 18,这只是如果数字大小不同我会遇到问题的部分。
  • 考虑到您的两个 if 语句,您的 for 循环从未执行过; if(number2.length &gt; number1.length) 然后 number1.length - number2.length 小于 0 因此 i 永远不会是 &lt; 然后是减法的结果。第一个if 声明也是如此。
  • 您在创建计算器吗?总共 18 个是否会导致数组的不同元素分别为 1 和 8?

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


【解决方案1】:

您需要做的第一件事是将数字放入一个 int 数组中。通过将字符串拆分为字符数组来做到这一点。然后转换为 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

【讨论】:

    【解决方案2】:

    我对您的代码的理解是,您尝试将 0 预先附加(从头部推送)到较短的数组。查看第一个 if 块。 number1 的长度大于 number2 的长度。因此, number2.length - number1.length 是负数。然后,在 for 循环中, i

    正确的代码应该是,

       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 块应该以类似的方式更改。也许,java 为数组对象提供了一个 API 链接 insert(0, 0)。实施起来会更容易。

    【讨论】:

    • 您的代码似乎可以工作,但是当我实现它时,它仍然给出了同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-09-09
    • 1970-01-01
    • 2012-07-29
    • 2016-02-23
    • 2013-04-02
    相关资源
    最近更新 更多