我是Java的新手,我的代码遇到了问题。我试图在Java中的数组中查找重复项,直到自动递增使我遇到困难(它不会递增),一切似乎都可以正常工作。我检查了没有FOR z循环的情况,并且测试运行良好,存在“ match”的问题,当存在z循环时,“ match”不会增加。 这是代码,您能帮我吗?谢谢:-)
Exceptions
答案 0 :(得分:0)
我猜测,您正在尝试确定生日是否重复。而且,您正在count
次重做测试。
您的代码中有一个问题,因此实际上您每次都使用完全相同的生日来重做模拟,而不是重做相同的“重复生日模拟”。
for(int z = 0; z < count; z++){
//Populate the birthday array with random birthdays
Random rand = new Random();
rand.setSeed(count);
// populate birthdays with rand
// find duplicates from birthdays
}
您每次都使用count
设置随机种子。假设count
在循环期间没有变化,则意味着您正在Random
中设置相同的种子。设置相同的种子意味着随后生成的随机数序列将是相同的。这意味着,如果种子给您birthdays
而没有重复,则即使您重做100次,您也将获得相同的“无重复生日”。
您应该做的是将Random
结构移到循环之外。您甚至可以删除setSeed
,因为Random
正在自动播种。
Random rand = new Random();
//rand.setSeed(count); // you can remove the manual seeding
for(int z = 0; z < count; z++){
// populate birthdays with rand
// find duplicates from birthdays
}
答案 1 :(得分:-1)
问题不在于“匹配”本身。问题出在代码本身的逻辑上。
在此示例中,“生日”数组中有2个匹配项(值1和2)。
原始代码的问题之一是您在循环内设置测试数组的值,并且还在循环内进行“匹配检查”。
尝试这个:
public class Testing {
public static void main(String[] args) {
int match;
match = 0;
int[] birthdays = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2 };
for (int i = 0; i < birthdays.length; i++) {
for (int j = i + 1; j < birthdays.length; j++) {
if ((birthdays[i] == birthdays[j]) && (i != j)) {
match = match + 1;
}
}
}
System.out.println(match);
}
}
我不知道您想用代码实现什么,但是对于您遇到的问题,这将是实现它的方法之一。