【发布时间】:2016-05-11 06:49:39
【问题描述】:
这是 Java 中的一段代码,我正在尝试从任务数组中输出随机数,并确保没有重复输出,我将它们置于其他一些循环中(假设你有第六个,随机选择的任务“task[5]”;它通过 for 循环检查每个“tCheck”元素,而 task[5] 等于 tCheck 元素之一,它会继续尝试在之前找到另一个选项回到检查 forloop 的开头... tCheck[i] 元素在每个整体输出循环结束时更改为为任务元素确定的新随机数)。
问题是,尽管据说会针对所有 tCheck 元素检查每个新的随机任务,但有时(并非总是)有重复的任务输出(意思是说,而不是输出 2、3、6、1、8、7, 5,4,它会输出类似 2,3,2,1,8,7,5,4 的东西,其中“2”被重复......并不总是在同一个地方,这意味着它有时会像这样结束,同样,其中“4”重复:3,1,4,5,4,6,7,8)
int num = console.nextInt();
String[] tasks = {"1","2","3","4","5","6","7","8"};
String[] tCheck = {"","","","","","","",""};
for(int i = 0; i<= (num-1); i++){
int tNum = rand.nextInt(8);
for(int j = 0; j <=7; j++){
if(tasks[tNum].equals(tCheck[j])){
while(tasks[tNum].equals(tCheck[j])){
tNum = rand.nextInt(8);
}
j = 0;
}
}
tCheck[i] = tasks[tNum];
System.out.println(tasks[tNum]+" & "+tCheck[i]);
}
其他代码块都不会影响这部分(除了设置 Random int's、Scanners 等;这些都正确完成)。我只想让它随机打印出每个数字,而且只打印一次。永远不会有任何重复。我如何让它做到这一点?
提前致谢。
【问题讨论】:
-
为什么不使用 List 和 contains 方法
-
为什么不将新号码插入
HashSet而不是所有这些循环?每次生成一个新的时,您只需检查它是否已经存在于O(1)时间的HashSet中,如果存在,您可以忽略它并生成一个新的。 -
要回答所有“你为什么不是 ___”的问题,我是 Java 新手,我从来没有听说过你们刚才说的那些话。
-
@Ray25Lee
HashSet是一个Set,基本上包含独特的元素。当您插入一个新元素时,该类负责所有检查以确定该元素是否存在,换句话说,HashSet不能 包含重复项。通过使用这种数据结构,您可以将所有循环转换为一个单独的 if 语句,用于检查HashSet是否包含元素。
标签: java loops for-loop while-loop