Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java数组中插入随机数_Java_Arrays_Hash_Hashtable - Fatal编程技术网

在Java数组中插入随机数

在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

我必须使用开放寻址将900个随机整数散列到一个设置大小为1009的空表中。为了确定数字在表中的位置,我取了随机数mod 1009,然后将数字放在那里,如果它是打开的。如果没有,我应该在那之后检查下一个键,并继续逐个检查,直到找到一个打开的键来放置随机数。到目前为止,我掌握的代码如下:

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
。虽然在这种情况下确实不需要检查数组是否已满,事实上,有人可能会在其他情况下使用此代码。当表满时,它将进入一个无限循环。您应该在代码的“未来证明”中添加完整检查。