****// --------------------------------
package Practice;
import java.util.Random;
public class Card
{
Random gen = new Random();
private Card[] Deck = new Card[60];
private int i = 0;
private int drawnCard;
public static String cardName = "";
// Constructor to return String variable "cardName",
// which is later used by the MTGgui class.
public String Draw(String cardName)
{
if (i < Deck.length)
{
drawnCard = gen.nextInt(5) + 0;
switch (drawnCard)
{
case 0: cardName = "Instant";
case 1: cardName = "Sorcery";
case 2: cardName = "Creature";
case 3: cardName = "Enchantment";
case 4: cardName = "Land";
case 5: cardName = "Artifact";
default: cardName = "Nothing!";
}
Card.cardName = this.cardName;
}
return Card.cardName;
}
}
// Card class.
//--------------------------------
// --------------------------------
package Practice;
import javax.swing.JFrame;
public class MTGInterface extends JFrame
{
public static void main (String[] args)
{
MTGgui MTG = new MTGgui();
MTG.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MTG.setSize(300, 200);
MTG.setVisible(true);
}
}
// Main class.
// --------------------------------
// --------------------------------------------------
package Practice;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
// Importing required assets.
public class MTGgui extends JFrame // Code to set up the user interface.
{
// JButton variable that appears on-screen.
private JButton DrawCard;
// Constructor for this class.
public MTGgui()
{
super("MTG Deck Drawing Simulator : Mega Awesome Edition!!!");
setLayout(new FlowLayout());
DrawCard = new JButton("Draw a card");
add(DrawCard);
// Building an event handler for actions caused by button.
HandlerClass Handler = new HandlerClass();
DrawCard.addActionListener(Handler);
}
// Private class within MTGgui for event handling.
private class HandlerClass implements ActionListener
{
// Initializing private String variable that is the same
// as the "Card" class' variable - cardName.
private String card = Card.cardName;
public void actionPerformed(ActionEvent Event)
{
JOptionPane.showMessageDialog(null, "You drew a(n)" + card);
}
}
}
// MTGgui class
//--------------------------------------------------****
实际上,我创建了一个程序,旨在为用户提供包含一个按钮的界面。当按下按钮时,程序应该基于一个简单的随机变量和一个开关箱生成一个字符串,然后显示"你画了一个(n)"。
一切都如预期的那样起作用,除了MTGgui类中的"showDialogMessage"方法在调用时不显示字符串"cardName",它在其各自的类中被定义为另一个名为"card"的私有变量。对如何解决这个问题有什么建议吗?
试试这个:
private class HandlerClass implements ActionListener
{
// Initializing private String variable that is the same
// as the "Card" class' variable - cardName.
// private String card = Card.cardName;
public void actionPerformed(ActionEvent Event)
{
JOptionPane.showMessageDialog(null, "You drew a(n) " + Card.draw());
}
}
公共类Card{
private static Card[] Deck = new Card[60];
// Constructor to return String variable "cardName",
// which is later used by the MTGgui class.
public static String draw()
{
Random gen = new Random();
String returningCardName = "";
int i = 0;
// i will be always 0...
if (i < Deck.length)
{
int drawnCard = gen.nextInt(5) + 0;
switch (drawnCard)
{
case 0: returningCardName = "Instant"; break;
case 1: returningCardName = "Sorcery"; break;
case 2: returningCardName = "Creature"; break;
case 3: returningCardName = "Enchantment"; break;
case 4: returningCardName = "Land"; break;
case 5: returningCardName = "Artifact"; break;
default: returningCardName = "Nothing!"; break;
}
}
return returningCardName;
}
}
这个解决方案有很多静态/非静态变量/方法,这不是最好的编程方式,但它是有效的。