0

I have already posted this code, however there's more problems, this time with a variable initialization error. The error shows up on line 68 with the variable playerMove. I have scoured the internet on as to why the it complains that the variable hasn't been initialized to no avail. Can anybody tell me why my IDE complains that I haven't assigned a value to playerMove?

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

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

public Rps()
{
  super("Rock, paper, Scissors");

  rock = new JRadioButton("   Rock   ", true);
  paper = new JRadioButton("   Paper  ");
  scissors = new JRadioButton(" Scissors ");

  ButtonGroup rpsButtons = new ButtonGroup();
  rpsButtons.add(rock);
  rpsButtons.add(paper);
  rpsButtons.add(scissors);

  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(display);
}

/**
 *  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;}
return -1;  
}

public void actionPerformed(ActionEvent e)
{
  char playerMove, computerMove; //Errors start around here
  if (rock.isSelected()){
    playerMove = 'R';}
  else if (paper.isSelected()){
    playerMove = 'P';}
  else if (scissors.isSelected()){
    playerMove = 'S';}

int k = (int)(Math.random() * 3);
computerMove = moves[k];
int result = nextPlay(computerMove, playerMove); //More errors

String msg = "  You said " + makeWord(playerMove) + ", I said " +
             makeWord(computerMove); //Even more errors
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;
}
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);
}
}
Showman
  • 55
  • 2
  • 6

1 Answers1

3

You've declared playerMove, but in the following

char playerMove, computerMove; //Errors start around here
if (rock.isSelected()){
    playerMove = 'R';
} else if (paper.isSelected()){
    playerMove = 'P';
} else if (scissors.isSelected()){
    playerMove = 'S';
} // add an else with default value or initialize it in its declaration above 

what happens if none of the if conditions evaluate to true? Your variable will stay in an un-itialized state. The compiler cannot allow that. Either add an else block to your if-else or initialize it right away with some default value

char playerMove = '0';
Sotirios Delimanolis
  • 274,122
  • 60
  • 696
  • 724