如何使用许多随机整数填充树?

时间:2015-03-16 00:39:30

标签: java tree binary-tree binary-search-tree populate

我正在编写一个程序,该程序应该填充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);
}

}

1 个答案:

答案 0 :(得分:0)

Math.random返回介于0.0和1.0之间的double值,因此输入int是错误的。

就像做0 * 3001 * 300 ==非常随机。

如果你乘以300.00,结果会大不相同。

还要考虑http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

Random个实例保留在内存中并调用nextInt #nextInt()