Java:无法通过代码计算中位数

时间:2013-10-14 00:59:23

标签: java arrays median

我有两个文件用于我的Array中间代码。第一个文件(ArrayMedian.java)用于收集然后计算中位数,第二个文件是测试文件(ArrayMedianTest.java)

我提供了一些源代码,需要修改它接受数据集中每个数字的设置范围。我完成了那部分并显示了随机范围,但现在当我到达阵列时它不再计算,我真的无法指出出错的地方。

我要做的另一件事是在ArrayMedian中,在那里放一个while循环使其终止,如果' 0'是数据集的输入,但它似乎不想在该文件中工作,是否可能是由于文件中没有main?

package bonus2.u06.exercise.ex3;

import java.util.Scanner;

public class ArrayMedian {

    private int[] arr;  // just declare array
    Scanner keyboard;   // shared field 

    // initialize keyboard and array
    public void init() {
        keyboard = new Scanner( System.in );    
        System.out.print("Enter the dataset size: ");

        int size = keyboard.nextInt(); // must be odd number
        arr = new int[ size ];   // instantiate 
    }

    // Randomize the array
    public void getRange() {        
        //System.out.println("\nYou entered: ");
        System.out.print("Enter a Range: ");
        int range = keyboard.nextInt(); 

        System.out.print("array: \n");
        for(int i = 0; i < arr.length; i++){
            int myRnd = (int)( range * Math.random() );

            System.out.print(" " + myRnd + " ");
        }
    }

    // find the median of array
    public int calcMedian() {
        int half_length = arr.length/2;

        for (int i = 0; i < arr.length; i++) {

            int count = 0;

            for (int j = 0; j < arr.length; j++) {
                if (arr[i] > arr[j])
                    count++;
            }
            if (count == half_length) {
                 //<=========  terminate this method
                return arr[i];
            }

        }

        return 0;   
    }

}

ArrayMedianTest:

package bonus2.u06.exercise.ex3;

public class ArrayMedianTest {

    public static void main(String args[]) {
        // instantiate 
        ArrayMedian obj = new ArrayMedian();
        // execute all methods 
        obj.init();
        obj.getRange();

        int median = obj.calcMedian();
        System.out.println("\nmedian : " + median);

        System.out.println("\n--- done ---");
    }   

}

1 个答案:

答案 0 :(得分:1)

结果证明,你的算法运行得很好,除了在getRange()方法中,你忘了设置数组的值,所以数组是一个零数组。以下是它的外观:

public void getRange() {        
    //System.out.println("\nYou entered: ");
    System.out.print("Enter a Range: ");
    int range = keyboard.nextInt(); 

    System.out.print("array: \n");
    for(int i = 0; i < arr.length; i++){
        int myRnd = (int)( range * Math.random() );

        System.out.print(" " + myRnd + " ");
        arr[i] = myRnd; // <-- You missed this line right here!
    }
}

另外,作为一个推荐,如果你想把代码放在stackoverflow中,它必须在行的开头加上你可能使用的任何缩进的间距为4。好运编程!