Качели бумажные ножницы Nuke Super Error
Здравствуйте, stackru сообщество, я пытаюсь добавить функцию nuke в это приложение графического интерфейса. Тем не менее, моя IDE жалуется на супер-оператор, а также жалуется, что не может найти символ msg. Это работало отлично, прежде чем я добавил функцию 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);
}
}
2 ответа
Конструкторы не используют void
ключевое слово. Это только для методов. Также сопоставьте имя конструктора с объявленным типом
public RpsNuke() {
super("Rock, Paper, Scissors, Nuke");
...
}
Причина, по которой вы видите ошибки для переменной msg
является то, что они не видны в объеме всех if
блоки выписок. Чтобы исправить, вам нужно создать один String
Скорее, при создании одного кусочка еды, добавляя к нему. Также не используйте TimeUnit.SECONDS.sleep
в Swing это просто мешает EDT
от обновления приложения. Вместо этого используйте таймер качания.
Удалить ключевое слово void
поскольку это будет означать, что вы вызываете метод с тем же именем, что и ваш класс. Скорее вы вызываете конструктор; не метод.
public void RpsNuke() { ... }
в
public RpsNuke() { ... }