Java 洗三张牌

Java 洗三张牌,java,shuffle,Java,Shuffle,问:我如何设置我的Shuffle按钮的ActionListener,使其执行按钮声明的操作,即洗牌屏幕上显示的3张牌(图像文件夹中54张牌中的3张牌)?每次我运行程序时,它们都会随机出现,这很好,但我需要添加一个“随机”按钮,允许在不重新启动程序的情况下进行这些更改。 这是我到目前为止得到的 //Jeffrey Zachary //Advanced Java: Sept 15 2013 //Display 3 cards, shuffle them when called to do so i

问:我如何设置我的Shuffle按钮的ActionListener,使其执行按钮声明的操作,即洗牌屏幕上显示的3张牌(图像文件夹中54张牌中的3张牌)?每次我运行程序时,它们都会随机出现,这很好,但我需要添加一个“随机”按钮,允许在不重新启动程序的情况下进行这些更改。 这是我到目前为止得到的

//Jeffrey Zachary
//Advanced Java: Sept 15 2013
//Display 3 cards, shuffle them when called to do so

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.*;

class DisplayCards extends JFrame implements ActionListener{
private JPanel cards;
private JButton shuffle;
private JLabel c1, c2, c3;
private Container contents;
private ImageIcon[] imIc;

 int cardA = 1 + (int)(Math.random() * 54);
 int cardB = 1 + (int)(Math.random() * 54);
 int cardC = 1 + (int)(Math.random() * 54);

//create variables to store the random number for card 
private ImageIcon firstCard = new ImageIcon("card/" + cardA + ".png");
private ImageIcon secondCard = new ImageIcon("card/" + cardB + ".png");
private ImageIcon thirdCard = new ImageIcon("card/" + cardC + ".png");

public DisplayCards(){
    super("Display three cards");
    contents = getContentPane();
    contents.setLayout(new BorderLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Creating card labels
c1 = new JLabel(firstCard, JLabel.CENTER);
c2 = new JLabel(secondCard, JLabel.CENTER);
c3 = new JLabel(thirdCard, JLabel.CENTER);

    //Creating panel
cards = new JPanel(new BorderLayout());

    //Creating button
shuffle = new JButton("Shuffle");
shuffle.addActionListener(this);
    //Adding buttons
cards.add(shuffle, BorderLayout.PAGE_END);

    //Adding labels
cards.add(c1, BorderLayout.LINE_START);
cards.add(c2, BorderLayout.CENTER);
cards.add(c3, BorderLayout.LINE_END);
contents.add(cards, BorderLayout.CENTER);
setResizable(false);
setSize(255, 177);
setVisible(true);

}
public static void main(String[] args) {
    DisplayCards dc = new DisplayCards();

}

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getSource() == shuffle){

    }

}

}

无法创建新的家庭作业标记(提示):)-此处禁止牵手-

试试这个,应该可以。这个想法是将
ActionEvent
链接到每次按下按钮时要执行的代码。详情请阅读

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getSource() == shuffle) {
        // add code here for shuffling 3 cards
    }
}
}

类似这样的循环防止卡片匹配可能在这里是合适的,因为您需要确认卡片的唯一性的卡片数量很少


循环不断创建一个随机数,直到它与前面的数字不匹配为止。完成后,重新选择合适的卡片并重新显示它们

无论您尝试了什么,如果您有问题,我们将很乐意帮助您,但我们不会解决您的家庭作业,而是建议您将显示/GUI代码与卡/卡组处理代码分开。试图在一个类中混合逻辑可能会导致混乱,并使单元测试变得困难。我建议你编写一个单元测试,测试你的Crad/deck应该如何运行,即没有gui代码。是的,我只是给他指出问题的解决方案,而不是解决他的家庭作业。但你是对的,我将编辑我的答案,因为它不是完全正确的。
   @Override
    public void actionPerformed(ActionEvent e) {
    if(e.getSource() == shuffle) {
    cardA = 1 + (int)(Math.random() * 54);
    while(cardB == cardA){
        cardB = 1 + (int)(Math.random() * 54);
        }
    while (cardC == cardB || cardC == cardB){
        cardC = 1 + (int)(Math.random() * 54);
    }

    firstCard = new ImageIcon("card/" + Integer.toString(cardA) + ".png");
    secondCard = new ImageIcon("card/" + Integer.toString(cardB) + ".png");
    thirdCard = new ImageIcon("card/" + Integer.toString(cardC) + ".png");
    DisplayCards()
}