【问题标题】:Java: Unable to get Median calculated with codeJava:无法使用代码计算中位数
【发布时间】:2013-10-14 00:59:23
【问题描述】:

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

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

我正在尝试做的另一件事是在 ArrayMedian 中,如果为数据集输入“0”,则在其中放置一个 while 循环以使其终止,但它似乎不想在该文件中工作,可能是因为文件中没有 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 ---");
    }   

}

【问题讨论】:

  • 你从来没有真正用随机数据填充arr。我想你忘了包括arr[i] = myRnd
  • 甜蜜,我在我的 int myRnd 之后添加了那个位,并用中位数解决了这个问题!谢谢!现在,如果我能弄清楚为什么我不能使用 while 循环。
  • 什么意思,不能使用while循环?
  • 每当我尝试在方法之外放置一个while循环时,都会被告知我有一个语法错误,“while”,AnnotationName 无效。
  • 使用 Arrays.sort() 会更快更简单,因为它是 O(N log N)

标签: java arrays median


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

【讨论】:

    猜你喜欢
    • 2015-04-14
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2014-12-26
    • 2023-03-21
    相关资源
    最近更新 更多