在Java数组中插入随机数
我必须使用开放寻址将900个随机整数散列到一个设置大小为1009的空表中。为了确定数字在表中的位置,我取了随机数mod 1009,然后将数字放在那里,如果它是打开的。如果没有,我应该在那之后检查下一个键,并继续逐个检查,直到找到一个打开的键来放置随机数。到目前为止,我掌握的代码如下:在Java数组中插入随机数,java,arrays,hash,hashtable,Java,Arrays,Hash,Hashtable,我必须使用开放寻址将900个随机整数散列到一个设置大小为1009的空表中。为了确定数字在表中的位置,我取了随机数mod 1009,然后将数字放在那里,如果它是打开的。如果没有,我应该在那之后检查下一个键,并继续逐个检查,直到找到一个打开的键来放置随机数。到目前为止,我掌握的代码如下: import java.util.*; public class openAdd{ public static void main(String[] args) { //set table length
import java.util.*;
public class openAdd{
public static void main(String[] args) {
//set table length
int[] table = new int[1009];
//insert 900 random integers into the table using open addressing
//random number % table size = the key the number should be placed
//if the key is already taken go to the next key until you find an open one
Random randomGenerator = new Random();
for (int i = 0; i < 900; i++) {
int num = randomGenerator.nextInt(99999);
int key = num % 1009;
if (table[key] == 0) {
table[key] = num;
}
}
}
import java.util.*;
公共类openAdd{
公共静态void main(字符串[]args){
//设定桌子长度
int[]表=新int[1009];
//使用开放寻址在表中插入900个随机整数
//随机数%table size=应放置数字的键
//如果钥匙已经取下,请转到下一把钥匙,直到找到一把打开的钥匙
Random randomGenerator=新的Random();
对于(int i=0;i<900;i++){
int num=randomGenerator.nextInt(99999);
int key=num%1009;
如果(表[键]==0){
表[键]=num;
}
}
}
}
我认为目前为止我所拥有的是好的,我只是不知道如果原始密钥中已经有一些内容,如何将密钥设置为key+1。谢谢您的帮助,如果需要添加任何内容,请告诉我。您的想法似乎是正确的,只是没有正确的实现。如果
table[key]
非零,则需要递增key
,直到在table
中找到索引,其中table[key]
为零。您可以使用Java的余数运算符(就像您已经使用的那样)来防止key
在数组的范围内增加:
int key = num % 1009;
if (table[key] == 0) {
table[key] = num;
} else {
while (table[key = (key + 1) % table.length] != 0);
table[key] = num;
}
由于
table.length
大于您正在设置的元素数量,因此无需检查数组是否已满。另外,请记住,num
可以是0
您是在问如何增加变量吗,我想我应该在if后面加一个else语句,然后在里面加一个for循环,然后一旦我找到一个==0的键,我就应该把这个数字放在那里。听起来不错。我只是不确定要在for循环中加什么,然后,当我到达数组的末尾,数组仍然满的时候,我如何回到数组的开头继续检查呢谢谢,这完美地回答了我原来的问题!如果键+1确实一直到表的末尾,因为它几乎可以从末尾开始,那么键+1在到达末尾后是否会返回到0?如果使用(键+1)%table.length
,那么它在到达末尾后会返回到0
。虽然在这种情况下确实不需要检查数组是否已满,事实上,有人可能会在其他情况下使用此代码。当表满时,它将进入一个无限循环。您应该在代码的“未来证明”中添加完整检查。