【问题标题】:Swing Rock Paper Scissors Nuke Super ErrorSwing Rock Paper Scissors Nuke Super Error
【发布时间】:2013-09-26 13:29:08
【问题描述】:

我正在尝试将“nuke”功能添加到此 Rock Paper Scissors GUI 应用程序中。但是,我的 IDE 抱怨 super 语句,它还抱怨它找不到符号消息。在我添加 nuke 功能之前,这非常有效。我可以添加什么来让它工作?

import java.util.concurrent.TimeUnit;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class RpsNuke extends JFrame
   implements ActionListener
{
private final char moves[] = {'R', 'P', 'S', 'N'};
private JRadioButton rock, paper, scissors, nuke;
private JTextField display;

public void Rps()
{
super("Rock, Paper, Scissors, Nuke");

rock = new JRadioButton("   Rock   ", true);
paper = new JRadioButton("   Paper  ");
scissors = new JRadioButton(" Scissors ");
nuke = new JRadioButton(" Nuke ");
ButtonGroup rpsButtons = new ButtonGroup();
rpsButtons.add(rock);
rpsButtons.add(paper);
rpsButtons.add(scissors);
rpsButtons.add(nuke);

JButton go = new JButton("         Go         ");
go.addActionListener(this);

display = new JTextField(25);
display.setEditable(false);
display.setBackground(Color.yellow);

Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(rock);
c.add(paper);
c.add(scissors);
c.add(go);
c.add(nuke);
c.add(display);
if (nuke.isSelected()){
display.setText("Don't do it man");}
else {
display.setText("");}
}

/**
 *  returns -1 if the player wins,
 *  0 if it's a tie, and 1 if the computer wins
 */
private int nextPlay(char computerMove, char playerMove)
{
if ((computerMove == 'R'&&playerMove == 'S')||(computerMove == 'S'&&playerMove=='P')||(computerMove=='P'&&playerMove=='R')){
 return 1;}
else if ((computerMove == 'R'&&playerMove == 'R')||(computerMove=='S'&&playerMove=='S')||(computerMove=='P'&&playerMove=='P')){
 return 0;}
else if (playerMove == 'N'){
 return 2;}
return -1;  

}

public void actionPerformed(ActionEvent e)
{
 char playerMove, computerMove;
 playerMove = 0;
 if (rock.isSelected()){
   playerMove = 'R';}
 else if (paper.isSelected()){
   playerMove = 'P';}
else if (scissors.isSelected()){
  playerMove = 'S';}
else if (nuke.isSelected()){
  playerMove = 'N';}
int k = (int)(Math.random() * 3);
computerMove = moves[k];
int result = nextPlay(computerMove, playerMove);

if (result != 2)
{String msg = "  You said " + makeWord(playerMove) + ", I said " +
             makeWord(computerMove);
}
else if (result == 2)
{String msg = "It's too late, we're all dead!";
 TimeUnit.SECONDS.sleep(1);
 msg = "...";
 TimeUnit.SECONDS.sleep(1);
 msg = "Look at what you did, there's nothing left.";
 TimeUnit.SECONDS.sleep(1);
 msg = "Looks like we have to start over again...";
 main(null);                        
}             
else if (result < 0)
  msg += " -- you win.";
else if (result == 0)
  msg += " -- tie.";
else if (result > 0)
  msg += " -- I win.";
display.setText(msg);
}

private String makeWord(char move)
{
String word = "";

switch (move)
{
  case 'R': word = "rock"; break;
  case 'P': word = "paper"; break;
  case 'S': word = "scissors"; break;
  case 'N': word = "nuke"; break;
}
return word;
}

public static void main(String[] args)
{
  Rps window = new Rps();
  window.setBounds(300, 300, 300, 140);
  window.setDefaultCloseOperation(EXIT_ON_CLOSE);
  window.setVisible(true);
}
}

【问题讨论】:

  • However, my IDE complains about the super statement - 虽然已经发布了答案,但将来最好有投诉的性质。你把你的车丢给机械师说it doesn't work吗?
  • 我的眼睛抱怨大量未缩进的代码转储。格式化您的代码示例,并针对您的问题专门制作它们,以便它们展示您的问题而不是其他任何东西

标签: java swing user-interface constructor


【解决方案1】:

删除关键字void,因为这意味着您正在调用与您的类同名的方法。相反,您正在调用构造函数;不是方法。

public void RpsNuke() { ... }

public RpsNuke() { ... }

【讨论】:

    【解决方案2】:

    构造函数不使用void 关键字。这仅适用于方法。还将构造函数名称与声明的类型匹配

    public RpsNuke() {
        super("Rock, Paper, Scissors, Nuke");
        ...
    }
    

    您看到变量msg 的错误的原因是它们在所有if 语句块的范围内都不可见。要解决此问题,您需要创建一个 String,而不是在构建一个 piece-meal 时附加到它。也不要在 Swing 中使用TimeUnit.SECONDS.sleep,这只会阻止EDT 更新应用程序。请改用Swing Timer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多