2017-04-04 239 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)* [*] *和*为什么*会大大改进,这将解决问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。特别是,当数组有偶数个元素时,它如何平均中间两个值? –

相关问题