2013-12-17 40 views
0

我正在寫一個程序,打印一個數組,其中包含作爲參數傳遞的兩個數組的值的總和。當一個數組比另一個長時,我需要包含異常。在這種情況下,該方法應該打印這兩個數組共享的索引的總和,然後打印沒有相應值添加到的數組值。Java - 陣列不打印我想要的值

當我運行該程序時,它計算出它應該的總和,但是然後打印0.0而不是從我想重新打印的較長陣列中的原始值。任何人都知道我在代碼中做錯了什麼?

import java.util.*; 

class Sum 
{ 
    public static void main (String [] args) 
    { 
     double [] a1 = {2.4, 3.8}; 
     double [] a2 = {0.2, 9.2, 4.3, 2.8, 1.4}; 

     System.out.println (Arrays.toString (arraySum(a1,a2))); 
    } 

    public static double [] arraySum (double [] x, double [] y) 
    { 
     int length = 0; 
     int place = 0; 

     if (x.length < y.length) 
     { 
      double [] sumY = new double [y.length]; 
      length = y.length; 

      for (int j = 0; j <= x.length-1; j++) 
      { 
       sumY [j] = x[j] + y[j]; 
       place++; 
      } 

      for (int i = place; i <= y.length - 1; i++) 
      { 
       sumY [place] = y[i]; 
      }  

      return sumY;   
     } 

     if (x.length > y.length) 
     { 
      double [] sumX = new double [x.length]; 
      length = x.length; 

      for (int j=0; j <= y.length-1; j++) 
      { 
       sumX[j] = x[j] + y[j]; 
       place++; 
      } 

      for (int i = place; i <= x.length - 1; i++) 
      { 
       sumX [place] = y[i]; 
      } 

      return sumX; 
     } 

     else 
     { 
      double [] sum = new double [x.length]; 
      length = x.length; 

      for (int i = 0; i <= length - 1; i++) 
      { 
       sum[i] = x[i] + y[i]; 
      } 

      return sum; 
     } 

    } 
} 
+1

這是你對類似題目的第二個問題。你自己做功課,srsarkar7? – brettw

回答

1

你是不是在隨後for循環遞增place

for (int i = place; i <= x.length - 1; i++) 
{ 
    sumX [place] = y[i]; 
    place++; 
} 
+0

y [i]應該是x [i]? – poiu2000

+1

或者使用SumX [i]而不是SumX [place] –

+0

我不確定我是否理解 - 我只想在前兩個if語句的第一個循環中增加。對? – srsarkar7

0

如果其他結構看起來可疑。看起來最後一個是在你的情況下執行,但不應該...

+0

不應該是這樣的:if(x.length y.length)else ...? – javanoob

+0

由於每種情況都有返回語句,如果x.length不是> y.length(如果這就是你的想法),則最後的其他語句不會被執行。 – Radiodef

4

更改sumX [place] = y[i];sumX [i] = y[i];

+2

另外,if(x.length> y.length)下的第二個循環正在從錯誤的數組中複製。 – ajb

0

整個arraySum方法有很多重複的代碼可以刪除,這將使方法更清晰,更容易理解,並且不太可能出現錯誤。

public static double [] arraySum (double [] x, double [] y) 
{ 
    int length = Math.max(d.length, y.length); 

    double[] result = new double[length]; // initializes all values to 0 

    for (int i=0;i<length;i++) { 
     if (i<x.length) 
      result[i] = x[i]; // if x is this length use its value instead of 0 
     if (i<y.length) 
      result[i] += y[i]; // if y is this length add its value to the sum 
    } 

    return result; 
} 

這就是你所需要的...