我创建了以下方法,以便创建唯一的随机数.(此唯一值属于树的节点):
static Random rand = new Random();
public static ArrayList<Node> go(int n) {
ArrayList<Node> list = new ArrayList<Node>();
ArrayList<Integer> numList = new ArrayList<Integer>();
// TODO Auto-generated method stub
for(int i = 1; i<=5; i++)
{
int number = rand.nextInt(10)+1;
if(list.size()>0 && !check(list,number))
{
i--;
continue;
}
numList.add(number);
Node node = new Node();
node.data = number;
list.add(node);
}
int w = 0;
for (Node d : list) {
System.out.println(w+": "+d.data);
w++;
}
return list;
}
private static boolean check(ArrayList<Node> list, int num) {
// TODO Auto-generated method stub
boolean b = false;
/*if(list.size()==0)
return true;
*/
for (Node node : list) {
if(node.data == num)
b = false;
else
b = true;
}
return b;
}
Run Code Online (Sandbox Code Playgroud)
但它不会创建唯一的数字,我的列表中仍然存在重复数字.喜欢 :
0: 10
1: 1
2: 10
3: 5
4: 6
Run Code Online (Sandbox Code Playgroud)
问题是如果找到重复的数字,你不会在check函数内停止for循环.循环继续,b可以变回true.
你应该做的是例如:
private static boolean check(ArrayList<Node> list, int num) {
for (Node node : list) {
if(node.data == num)
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)