【发布时间】: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)