[英]Why is not operator giving different result but using = giving correct answer
[英]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.