簡體   English   中英

java添加兩個具有不同長度的int數組。 為什么給出的結果小於正確的結果?

[英]java adding two int arrays with different lengths. why giving a result that is smaller than correct result?

public void add(int[]a1,int[]a2){       

    int atotal[] = new int[20];
    int capacity3 = Math.max(a1.length, a2.length);

    for (int i = 0; i < capacity3; i++) 
    {
      int a3 = a1[i] + a2[i];
      if (a3 > 9)
      {
        atotal[i] = a3 % 10;
        atotal[i+1] += a3 /10;
      }
      else
      {
        atotal[i] = a3;
      }
    } 

    for(int i = capacity3 - 1; i >= 0; i--)
    {
      System.out.print(atotal[i] + " ");
    }
}

在我的程序中,將兩個數組中的每個元素相加時,每個位加法的進位都不會添加到下一個無關緊要的位。 因此,如果array1 [0] = 9,array2 [0] =2。我的結果[0] = 1,而我的result [1]沒有從[0]中添加的結果。 例如,如果我將9999和1234作為兩個數組,則結果是0123而不是11233。

問題是您將進位放在atotal[i+1]然后完全忽略下一個循環中的值。

要解決此問題,您可以將atotal[i]添加到a3

int a3 = a1[i] + a2[i] + atotal[i];

然后在if語句中,您實際上不需要做+=在這里atotal[i+1] += a3 / 10; 因為atotal[i+1]始終為0,並且在下一個循環中將其擦除,因此它可能只是=

最后,如果有進位,則for循環可能會丟失第一個數字。 要解決此問題,您可以將i起始容量設為3,但在某些情況下,您將打印前導0。

所以調用add(new int[]{9,9,9,9}, new int[]{4,3,2,1}); 這些修復程序產生

1 1 2 3 3 

因此,固定代碼可能看起來像這樣。

public static void add(int[]a1,int[]a2){       
    int atotal[] = new int[20];
    int capacity3 = Math.max(a1.length, a2.length);
    for (int i = 0; i < capacity3; i++) {
        int a3 = a1[i] + a2[i] + atotal[i];
        System.out.println(a3);
        if(a3>9) {
            atotal[i] = a3 % 10;
            atotal[i+1] = a3 / 10;
        } else {
            atotal[i]=a3;
        }
    } 
    for(int i=capacity3; i>=0; i--) {
        System.out.print(atotal[i] + " ");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM