我正在编写一个程序,该程序应该填充10个随机树,其中包含1000个随机值,范围从0到300.这是我的测试人员类的代码。然而,当我运行这个程序时,它会为每棵树打印出完全相同的东西,而在代码方面它看起来像是我添加了不同的随机数。
我感觉它一直在添加相同的数字,但我不知道如何更改它。我对Random类或Math.random()不是很熟悉。
package ch08.trees;
import java.util.ArrayList;
public class BSTTest {
ArrayList<BinarySearchTree<Integer>> trees = new ArrayList<BinarySearchTree<Integer>>();
public BSTTest() {
for(int h = 0; h < 10; h++) { //Populate the arraylist with 10 trees
trees.add(new BinarySearchTree<Integer>());
}
for(int i = 0; i < 10; i++) //Run through 10 trees in array
for(int j = 0; j < 1000; j++) { //1000 integers for each tree
trees.get(i).add((int) Math.random()*300);
}
}
public String toString() {
String s = "";
for(int i = 0; i < 10; i++) {
int height = trees.get(i).height();
int optimal = trees.get(i).optimal();
double ratio = (double) height/(double) optimal; //Ratio only useful when decimal
s += "Tree " + i + "--" + "Height: " + height + ", Optimal Height: " + optimal +
", Bushyness Ratio: " + ratio + "\n";
}
return s;
}
public static void main(String[] args) {
BSTTest a = new BSTTest();
System.out.println(a);
}
}
答案 0 :(得分:0)
Math.random返回介于0.0和1.0之间的double值,因此输入int是错误的。
就像做0 * 300
或1 * 300
==非常随机。
如果你乘以300.00,结果会大不相同。
还要考虑http://docs.oracle.com/javase/7/docs/api/java/util/Random.html
将Random
个实例保留在内存中并调用nextInt
#nextInt()