2013-06-02 38 views
0
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,我的結果[1]沒有添加[0]。 例如,如果我把9999和1234作爲兩個數組,結果是0123而不是11233.java添加兩個不同長度的int數組。爲什麼給出比正確結果小的結果?

+2

大聲笑,這段代碼的格式是非常殘酷的。 –

+2

這將拋出'ArrayIndexOutOfBoundsException',如果你甚至嘗試使用2個不同長度的數組 – SJuan76

+0

@Djon如果最大長度大於20,它應該這樣做。 –

回答

4

問題是你把carry放在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] + " "); 
    } 
} 
+0

非常感謝!它現在有效。 – user2444256

相關問題