2012-05-22 42 views
0

我有一個數組,我想將它分成幾部分,分爲3部分。我知道如何去做,但我也想處理在我的數組中有2個元素的情況。等分3個部分的數組

在這種情況下,我希望center數組爲零元素的空數組(center.length == 0)(必須有零個元素,而不僅僅是一個空數組)。

這裏是我做過什麼:

int elements = data.length; 
int sizeLeft; 
int sizeCenter; 
int sizeRight; 
    if (elements > 2) { 
     if (elements % 3 == 0) { 
      sizeLeft = elements/3; 
      sizeCenter = elements/3; 
      sizeRight = elements/3; 
     } else if (elements % 3 == 1) { 
      sizeLeft = (elements/3) + 1; 
      sizeCenter = elements/3; 
      sizeRight = elements/3; 
     } else { //if (elements % 3 == 2) 
      sizeLeft = (elements/3) + 1; 
      sizeCenter = elements/3; 
      sizeRight = (elements/3) + 1; 
     } 

     int[] left = makeArray(data, 0, sizeLeft); 
     int[] center = makeArray(data, sizeLeft, sizeCenter); 
     int[] right = makeArray(data, sizeLeft + sizeCenter, sizeRight); 

    } else if (elements == 2) { 
     int[] center = new int[]{}; 
     int[] left = makeArray(data, 0, 1); 
     int[] right = makeArray(data, 1, 1); 
    } 

makeArray方法:

public static int[] makeArray(int[] data, int startCopy, int size) { 
    int[] array = new int[size]; 
    System.arraycopy(data, startCopy, array, 0, size); 
    return array; 
} 

data是要在3個部分要拆分的主陣列:leftcenterright

我想問的是,如果有一種方法可以將兩個ifs合併爲一個if,並且很好,優雅。

謝謝。

回答

1

你可以簡單的寫:

int elements = data.length; 
int mod = elements % 3; 
int div = elements/3; 

int sizeLeft = div + (mod > 0 ? 1 : 0); 
int sizeCenter = div; 
int sizeRight = div + (mod > 1 ? 1 : 0); 
+0

所以,當你把這個方法'System.arraycopy(數據,startCopy,陣列,0,大小);'作爲大小數字0它實際上會創建一個零元素的數組? –

+0

是的,正如javadoc似乎所說:http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#arraycopy(java.lang.Object,int,java.lang。 Object,int,int) –

+1

如果您願意,也可以使用Arrays.copyOf(int [],int)! :) –

0

試試這個

 int len= data.Length; 
     int pos = len/3; 
     int remaining = len % 3; 

     int firstpos = pos + (remaining > 0 ? 1 : 0); 
     int centerpos=pos; 
     int lastpos = pos + (remaining/2);