gpt4 book ai didi

java - 使用时从随机中删除数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:37 24 4
gpt4 key购买 nike

我不确定标题是否正确地表达了我的要求,如果不是,抱歉,但我想做的是使用 GUI 创建一个内存匹配游戏。我有一个数组,并且有按钮从数组中随机打印一个元素,但是问题是,我可以多次打印相同的元素。有没有办法在使用该元素后将其从选择中删除?如果没有办法做到这一点,有什么想法可以让它只使用每个元素一次吗?这是我当前的代码:

    package MemoryMatching;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MemoryGUI extends JFrame implements MemoryMatch, ActionListener{
JPanel mainPanel, boardPanel;
JButton [][] gridButtons = new JButton[3][4];
char cardArray[] = new char[12];
int numInPlay;

public MemoryGUI(){
cardArray[0] = 'A';
cardArray[1] = 'A';
cardArray[2] = 'B';
cardArray[3] = 'B';
cardArray[4] = 'C';
cardArray[5] = 'C';
cardArray[6] = 'D';
cardArray[7] = 'D';
cardArray[8] = 'E';
cardArray[9] = 'E';
cardArray[10] = 'F';
cardArray[11] = 'F';
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
boardPanel = new JPanel();
boardPanel.setLayout(new GridLayout(4,3));
setBoard();
mainPanel.add(boardPanel, BorderLayout.CENTER);
add(mainPanel);
}
@Override
public void actionPerformed(ActionEvent e) {
JButton btnClicked = (JButton) e.getSource();
btnClicked.setEnabled(false);
char randomChar = cardArray[(int)new Random().nextInt(cardArray.length)];

btnClicked.setText(""+ randomChar);
faceUp();

}

@Override
public void setBoard() {
for(int x = 0; x < cardArray.length; x++) {

}
for(int row=0; row<gridButtons.length; row++){
for(int col=0; col<gridButtons[row].length;col++){
gridButtons[row][col] = new JButton();
gridButtons[row][col].addActionListener(this);
gridButtons[row][col].setText("No peeking");
boardPanel.add(gridButtons[row][col] );
faceDown();
}
}
}

@Override
public void isWinner() {
// TODO Auto-generated method stub

}
@Override
public void isMatch() {


}
@Override
public void faceUp() {
for(int x = 0; x < cardArray.length; x++) {
for(int y = 0; y < cardArray[x]; y++) {

}
}
}
@Override
public void faceDown() {


}
}

我目前得到的是类似的东西阿巴AF BFDEF C而不是:乙丙DEFABC美联储第一个示例具有三个 A 和一个 C,而不是像第二个示例中那样每个都有两个。如果可能的话,我不希望直接获得代码,而是希望朝着正确的方向前进。

最佳答案

一个简单的解决方案:不要使用数组。

相反,请使用 List<Integer> shuffle 该列表。然后只需将列表的最后一个元素用于您的目的 - 然后从列表中删除最后一个元素;并再次洗牌。

当然,您也可以编写一些代码来跟踪已使用的所有索引,并不断请求随机索引,直到获得以前未使用过的索引。

关于java - 使用时从随机中删除数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46732891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com