避免覆盖数组中随机生成的索引

问题描述 投票:0回答:1

如果一个数字随机生成两次,如何避免覆盖数组?

我正在创建一个简单的 javaFX 程序,用户可以在其中创建或搜索帐户。帐户详细信息需要存储在数组中的随机位置。我最大的挑战是不知道如何防止我的程序覆盖已经填充的索引位置的元素。

   SecureRandom rand = new SecureRandom();
   int randomNum;
   String label;
    
    
   String [] name = new String[5];


   public void create(ActionEvent event)
   {

        randomNum = rand.nextInt(5);
        
        nameText = nameField.getText();
        name[randomNum] = nameText;
        
        label = "User created sucessfully at position " + randomNum;
        
    }

我对代码的另一个关注是我为搜索创建的新数组,因为每个元素的索引都会改变,因为所有

null
元素都被删除以防止
nullpointerexception
.

public void search(ActionEvent event)
{
    int count = 0;
    
    
    nameText = nameField.getText();
    
    name = Arrays.stream(name)
                 .filter(s -> (s != null && s.length() > 0))
                 .toArray(String[]::new);
    
    
    boolean contains = Arrays.stream(name).anyMatch(nameText::equals);
    
    
    if(contains == true)
    {
        while(!name[count].equals(nameText))
        {
            count++;
        }
        
        label = "User " + nameText + " is registered and is " + age[count];
        nameField.setText("");
        displayLabel.setText(label);
    }
    else
    {
        label = "User " + nameText + " is not registered.";
        nameField.setText("");
        displayLabel.setText(label);
    }
    
    
}
java arrays javafx overwrite
1个回答
0
投票

跟踪未使用的索引并使用它们:

SecureRandom rand = new SecureRandom();
String label;


String [] name = new String[5];
List<Integer> unusedIndexes = new ArrayList<>();
{
    for (int i = 0 ; i < name.length; i++) {
        unusedIndexes.add(Integer.valueOf(i));
    }
}


public void create(ActionEvent event) {

    if (unusedIndexes.isEmpty()) {
        // handle situation where no more slots are available
        return ;
    }

    int randomNum = unusedIndexes.remove(rand.nextInt(unusedIndexes.size())).intValue();
    
    nameText = nameField.getText();
    name[randomNum] = nameText;
    
    label = "User created sucessfully at position " + randomNum;
    
 }
© www.soinside.com 2019 - 2024. All rights reserved.