如何添加或Java中的数组中删除一个随机数?

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

小XO游戏我提出的一个部分是每个我按下的按钮时,它变成符号X,然后电脑会随机选择一个按钮,使注册Ò上。

这是混淆了我的部分是随机按钮,电脑就会选择。我有9个按键一个JButton阵列,但是当计算机选择,将有选择已具有符号X这会毁了游戏的按钮的机会。

没有得到重复是不是一个问题,很容易解决,但我怎么能放弃与符号X按钮状态,这是不可用而产生的随机数?这是我到目前为止的代码:

在actionPerformed方法:

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);


}    
java
2个回答
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
投票

只是固定我的问题,并想张贴在这里的人的解决方案,有一些类似的问题。

我创建了一个将包含9倍的数字从0到8列表

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

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

然后通过shufflle的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

© www.soinside.com 2019 - 2024. All rights reserved.