我正在用骰子掷骰子。我得到了我想要的号码(随机int 1-6),但我想要显示的图像没有显示。它第一次显示正确的图像,但从不更改它。这是代码:
public void layoutComponents()
{
Container container = frame.getContentPane();
container.setLayout(new GridLayout(1, 1));
diceRoll.setEditable(true);
container.add(button);
container.add(addPanel());
//container.add(diceRoll);
frame.setSize(200, 200);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
class DiceActions implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
layoutComponents();
//diceRoll.append(Double.toString((int)numberRolled));
}
}
public ImageIcon rollDice()
{
double numberRolled = (int)(Math.random() * 10 + 1);
ImageIcon image = dice1;
if (numberRolled > 6)
{
numberRolled -= 4;
}
if(numberRolled == 1)
{
image = dice1;
System.out.println("1");
System.out.println(numberRolled);
return image = dice1;
}
else if(numberRolled == 2)
{
image = dice2;
System.out.println("2");
return image = dice2;
}
else if(numberRolled == 3)
{
image = dice3;
System.out.println("3");
return image = dice3;
}
else if(numberRolled == 4)
{
image = dice4;
System.out.println("4");
return image = dice4;
}
else if(numberRolled == 5)
{
image = dice5;
System.out.println("5");
return image = dice5;
}
else if(numberRolled == 6)
{
image = dice6;
System.out.println("6");
return image = dice6;
}
else
System.out.println("never reached");
System.out.println(numberRolled);
return image;
}
public JPanel addPanel()
{
JPanel panel = new JPanel();
panel.add(new JLabel(rollDice()));
return panel;
}
public void addListeners()
{
DiceActions action = new DiceActions();
button.addActionListener(action);
}
答案 0 :(得分:1)
double numberRolled = (int)(Math.random() * 10 + 1);
我不确定它(我的意思是,JVM如何处理它),但它可能会导致一些舍入问题,从而导致==运算符给出错误。你已经将它强制转换为int,那么为什么不将它存储为int呢?
return image = dice1;
,return image = dice2;
等等......
为什么不简单地“返回diceX;”?无需拥有本地ImageIcon变量。它可以在Java中工作,因为它仍然带有C语义的=运算符,但是如果你不打算这样做会吐出意想不到的结果。
答案 1 :(得分:0)
double numberRolled = (int)(Math.random() * 10 + 1);
ImageIcon image = dice1;
if (numberRolled > 6)
{
numberRolled -= 4;
}
此代码无法生成uniformly random numbers。 任何使用您的代码玩游戏的人都会很快了解到结果 不是随机的。
我通过Lindent
运行此代码,以使其可以容忍阅读和拍摄
中间的一些代码;只需注意一般流程
事情:
ImageIcon image = dice1;
if (numberRolled > 6) {
numberRolled -= 4;
}
if (numberRolled == 1) {
image = dice1;
System.out.println("1");
System.out.println(numberRolled);
return image = dice1;
}
/* ... */
else if (numberRolled == 6) {
image = dice6;
System.out.println("6");
return image = dice6;
} else
System.out.println("never reached");
System.out.println(numberRolled);
return image;
请注意,您已将image
初始化为dice1
。这可能是一个
糟糕的主意,因为它使查找错误更加困难。代替,
将其初始化为null
,这样你的其他代码就会死得很惨
死亡(NullPointerException
)如果其余代码没有设置
正确的价值。
但扔掉整件事;你想要做的是使用数组 存储模具图像和值之间的关系。这将是 代码的1/6,减少错误,更容易扩展到十,十二或 二十面死。