如何在Java中从数组添加或删除随机数?

时间:2019-02-05 16:49:59

标签: java

我正在制作的一款小型XO游戏的一部分是,每当我按下一个按钮时,它就会变成X符号,然后计算机会选择一个随机按钮来放置O符号。

让我感到困惑的部分是计算机将选择的随机按钮。我有一个带有9个按钮的JButton数组,但是当计算机选择时,将有机会选择一个已经带有符号X的按钮,这将破坏游戏。

不重复不成问题,并且很容易解决,但是我如何在生成随机数的同时给带有X符号的按钮一个不可用的状态?到目前为止,这是我的代码:

在执行操作的方法中:

if (e.getSource().equals(button1)) {

   button1.setIcon(X);
   xoro = true;
   button1.setEnabled(false);
   button1.setForeground(Color.BLACK);
}    

执行随机数并选择按钮的方法:

void computer_play(JButton[] buttons, ImageIcon O, ImageIcon X)
{
    Random rand = new Random();
    int randomnumber = rand.nextInt(8);

    buttons[randomnumber].setIcon(O);
    buttons[randomnumber].setEnabled(false);


}    

2 个答案:

答案 0 :(得分:1)

我建议保留一个单独的可用按钮数组,方法是过滤主数组或保持最新的单独数组。然后生成一个介于0和此较小数组长度之间的随机整数。 完全未经测试,未经编译的代码。

void computer_play(JButton[] buttons, ImageIcon O, ImageIcon X)
{
    JButton[] availableButtons = buttons.stream().filter((j) -> j.getIcon() == null).toArray(size -> new JButton[size]);
    Random rand = new Random();
    int randomnumber = rand.nextInt(availableButtons.length);

    availableButtons[randomnumber].setIcon(O);
    availableButtons[randomnumber].setEnabled(false);
} 

答案 1 :(得分:-1)

只需解决我的问题,并想在这里将解决方案发布给有类似问题的任何人。

我创建了一个列表,其中包含从0到8的9个数字

List<Integer> randomize = new ArrayList<>();

 for(int i =0; i < 9; i++)
        {
            randomize.add(i);
        }

然后通过Collections.shuffle(randomize);

整理列表

现在我们有8个无重复的“随机”数字(问题1已解决)

所以现在我会做类似button[randomize.get(0)].setIcon(O)的事情 并通过randomize.remove(0)删除该索引。当我按下按钮以避免重复时,该选择的号码将被删除。

当涉及到用户播放的按钮时,我会保留按钮位置的记录,并在按下类似的按钮时将其从列表中删除:

randomlist.remove(new Integer(Arrays.asList(buttons).indexOf(button1)));

现在我已经完成了作业!这是程序的图片:

XO in Java