【问题标题】:Variable might not have been initialized in an if/else if statement变量可能尚未在 if/else if 语句中初始化
【发布时间】:2013-09-25 20:37:38
【问题描述】:

我已经发布了这段代码,但是还有更多问题,这次是变量初始化错误。错误显示在第 68 行,带有变量 playerMove。我已经在互联网上搜索了为什么它抱怨变量没有被初始化无济于事。谁能告诉我为什么我的 IDE 抱怨我没有为 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);
}
}

【问题讨论】:

    标签: java compiler-errors variable-initialization


    【解决方案1】:

    你已经声明了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';
    

    【讨论】:

    • 这就像一个魅力。虽然我忘记了单引号,但这对程序来说似乎并不重要。谢谢!
    • @Showman 哦,0 的值是适合 charint 文字。例如,如果您有 char playerMove = g;,它将无法工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2018-04-28
    • 1970-01-01
    • 2012-03-25
    • 2015-07-04
    相关资源
    最近更新 更多