2017-04-04 96 views
1

我想將數組拆分成上下兩部分 但它不會工作 它只是爲我打印排序 我把隨機打印語句確保條件是真實,是如何將一個整數數組拆分爲兩個

在偶調節它讀取if和for語句 但奇怪的是隻讀取if語句

這裏是我的代碼

public static int GetTheLowerHalfandUpperHalf(int[] array) { 
    int size = array.length; 
    int even = size%2; 
    if (even == 0) { 
     //print the lower half 
     for(int i=0; i==even;i++) { 
      int[] upper; 
      upper = new int[i]; 
      System.out.println("The UPPER half is: "+Arrays.toString(upper)); 
      System.out.println("Q3 = " +median(upper)); 
     } 
     //print the upper half 
     for (int j=(even+1);j==size;j++) { 
      int[] lower; 
     lower=new int[j]; 
     System.out.println("The UPPER half is: "+Arrays.toString(lower)); 
     System.out.println("Q1 = " +median(lower)); 
     } 


    } else if ((array.length % 2) != 0) { 
     //print the lower half 
     for (int i=0;i==(Q2-1);i++) { 
      int[] upper; 
      upper = new int[i]; 
      System.out.println("The UPPER half is: "+Arrays.toString(upper)); 
      System.out.println("Q3 = " +median(upper)); 
     } 
     //print the upper half 
     for(int j=(Q2+1) ;j==size ;j++){ 
     int[] lower; 
     lower=new int[j]; 
     System.out.println("The UPPER half is: "+Arrays.toString(lower)); 
     System.out.println("Q1 = " +median(lower)); 
    } 
    } 
    return 0; 
}  

Q2是整個陣列的

+0

'for'循環的第二個段定義了它何時運行,而不是何時停止。例如,for(int j =(even + 1); j == size; j ++)'通常看起來更像'for(int j =(even + 1); j

+0

這個:'int even = size%2;'意味着偶數的even將爲0,奇數的爲偶數。這個:for(int i = 0; i == even; i ++){'意味着這個循環永遠不會執行偶數。至少你需要這樣一些東西:'int halfArrayMarker =(int)array.size/2;'然後你替換'for(int i = 0; i == even; i ++){'with'for (int i = 0; i == halfArrayMarker; i ++){'。 當你說「整個數組的中位數」時,你是指所有數值的平均值,還是標記數組的中點? – npinti

+0

我的意思是數組的中點。 –

回答

1

替代的解決方案位數:

int[] firstHalf = Arrays.copyOfRange(array, 0, array.length/2); 
int[] secondHalf = Arrays.copyOfRange(array, array.length/2, array.length); 

那麼你當然可以執行你的median()方法:

int firstMedian = median(firstHalf); 

記住,你不必重新發明輪子,但你必須使輪子適合你的車。

0

這不是一個好主意,因爲什麼hallens,如果你arraylist不是一個數字,它會崩潰..你能解釋更多的內容嗎?

+0

此代碼僅適用於數字 –

0
// double median(int[] arr, int start, int end) 
double hiMedian = median(arr, 0, array.length/2); 
double loMedian = median(arr, array.length/2, array.length); 

請注意,不建議在一般情況下進行陣列複製。計算範圍的第一個和結束指數就足夠了。

+0

非常感謝您的幫助。 –

+5

儘管這段代碼是受歡迎的,並且可能會提供一些幫助,但它會[如果包含解釋](/ meta.stackexchange.com/q/114762)* [*] *和*爲什麼*會大大改進,這將解決問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。特別是,當數組有偶數個元素時,它如何平均中間兩個值? –