【问题标题】:How do I use both && and || in an if statement如何同时使用 && 和 ||在 if 语句中
【发布时间】:2013-09-25 19:51:12
【问题描述】:

我正在开发一个石头剪刀布 gui 应用程序,但我一直不知道如何让它工作。我发现在第 49 行我得到一个非法的表达式开始错误。虽然我意识到这是一项任务,但我不确定是什么触发了错误:

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'){ //Where I get the error
 int r = 1;
 return r;
 }
else if (computerMove == 'R'&&playerMove == 'R'||computerMove=='S'&&playerMove=='S'||computerMove=='P'&&playerMove=='P'){
 int r = 0;
 return r;
}
else if (computerMove == 'S'&&playerMove == 'R'||computerMove=='P'&&playerMove=='S'||computerMove=='R'&&playerMove=='P'){
 int r = -1;
 return r;
}   

}

public void actionPerformed(ActionEvent e)
{
  char playerMove, computerMove;
  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);

String msg = "  You said " + makeWord(playerMove) + ", I said " +
             makeWord(computerMove);
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);
}

}

【问题讨论】:

  • 使用== 而不是=
  • 不需要定义变量r,赋值给它然后返回。你可以使用return 1
  • 您最好在if 条件中添加括号,以便更清楚地了解您正在测试的条件。另外,正如@nachokk 指出的那样,您需要== 而不是=
  • @ffarquet 伙计,这家伙还在上学,让他休息一下。你为什么不编辑他的问题并适当地格式化代码,然后向他解释为什么编码标准很重要?
  • 您的一个if 语句中包含===。这在 JavaScript 和 PHP 中是合法的,但在 Java 中不合法。

标签: java binary-operators


【解决方案1】:

你使用的是assignment操作符= 您需要在 if 块中使用 comparison 运算符 ==

if (computerMove == 'R'&amp;&amp; playerMove =='S'||computerMove=='S'&amp;&amp;playerMove=='P'|| computerMove=='P'&amp;&amp; playerMove=='R')

编辑:

有错别字

playerMove==='P' 在您的if 声明中

【讨论】:

  • 值得指出的是不需要括号(尽管它们可能会阐明逻辑),因为&amp;&amp;precedence|| 更高。
  • 好的,我解决了这个问题,但是我得到了一个非法的表达式开始错误。
  • @SajanChandran 我刚刚编辑了问题以包含完整代码
【解决方案2】:

试试这个:

 if ((computerMove == 'R'&&playerMove == 'S')||(computerMove=='S'&&playerMove=='P')||(computerMove=='P'&&playerMove=='R')){
     int r = 1;
     return r;
     }
else if ((computerMove == 'R'&&playerMove = 'R')||(computerMove=='S'&&playerMove=='S')||(computerMove=='P'&&playerMove=='P')){
 int r = 0;
 return r;
}
else if ((computerMove == 'S'&&playerMove == 'R')||(computerMove=='P'&&playerMove=='S')||(computerMove=='R'&&playerMove=='P')){
 int r = -1;
 return r;

【讨论】:

  • 虽然它有效,但我在第 49 行遇到非法的表达式开始错误
【解决方案3】:

除了其他人所说的使用 == 而不是 =,我只想使用括号。不会伤害任何东西,并提高了代码的可读性。所以你的陈述看起来像:

if (
(computerMove == 'R'&&playerMove =='R') ||
(computerMove=='S'&&playerMove=='S') ||
(computerMove=='P'&&playerMove=='P')
)...

【讨论】:

  • 我实际上是从你的一个 else 块(绘图场景)中抓取了块,但你明白了 :)
  • 这行得通,但是我在第 49 行收到一个错误,说这是表达式的非法开头。
  • @Showman 我觉得你放了太多= 标志。我在你的代码中看到了一个===(我想是在你编辑之后)。
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 2020-12-02
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
相关资源
最近更新 更多