2013-09-25 146 views
0

我已经发布了这段代码,但是还有更多的问题,这次有一个变量初始化错误。第68行显示错误的playerMove错误。我已经搜索了互联网为什么它抱怨变量没有被初始化为无效。有人可以告诉我为什么我的IDE抱怨我没有给playerMove分配一个值吗?变量可能尚未在if/else if语句中初始化

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

回答

3

您已经声明playerMove,但在以下

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 

如果没有的if条件评价为true会发生什么?您的变量将保持在未经初始化的状态。编译器不允许这样做。无论是一个else块添加到您的if-else或初始化一些默认值

char playerMove = '0'; 
+0

这工作就像一个魅力的时候了。虽然我忘记了单引号,但对程序来说似乎并不重要。谢谢! – Showman

+0

@Showman不客气。你是什​​么意思你忘了他们? –

+0

@Showman哦,值'0'是一个'int'文字,适合'char'。例如,如果你有'char playerMove = g;'这样的话就行不通。 –