0

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

我得到了一些源代码,需要对其进行修改,以接受数据集中每个数字的设定范围。我完成了那部分并显示了随机范围,但是现在当我到达他的数组时,它不再计算,我真的无法确定出了什么问题。

我正在尝试做的另一件事是在 ArrayMedian 中,如果为数据集输入“0”,则在其中放置一个 while 循环以使其终止,但它似乎不想在该文件中工作,可能是由于文件中没有主要内容?

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 ---");
    }   

}
4

1 回答 1

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 中,它必须在行首有四个间距以及您可能使用的任何缩进。祝编程好运!

于 2013-10-14T01:15:51.007 回答