使用" =="时字符串比较失败?

时间:2014-03-28 01:15:10

标签: java

我是一个极端的编码菜鸟,我刚开始。我设计了一个石头剪刀游戏,无法弄清楚它为什么不起作用。由于某种原因,用户输入在if语句中不起作用。请看一下。

    package com.youtube.njillatactics;

    import javax.swing.JOptionPane;

    public class RPS {
public static void main(String args[]){
    //start message
    JOptionPane.showMessageDialog(null, "Welcome to Nick's rock paper scissors game!");
    //get user input and convert to lower case
    String userInput = JOptionPane.showInputDialog("Choose rock, paper, or scissors.").toLowerCase();
    //generate random computer input
    double computerInput = Math.random();
    //match user input to converted computer input
    JOptionPane.showMessageDialog(null, match(userInput, convert(computerInput)));
}
//convert random computer input into choice
public static String convert(double x){
    if(x < 0.33){
        return "rock";
    }else if(x < 0.66){
        return "paper";
    }else
        return "scissors";
}
//check to see who wins
public static String match(String x,String y){
    if(x == y){
        return "Tie!";
    }else
    if(x == "rock"){
        if(y == "paper"){
            return "Computer wins!";
        }else
            return "User wins!";
    } 
    if(x == "paper"){
        if(y == "scissors"){
            return "Computer wins!";
        }else
            return "User wins!";
    }
    if(x == "scissors"){
        if(y == "rock"){
            return "Computer wins!";
        }else
            return "User wins!";
    }else
        return x + ", " + y;
}
}

2 个答案:

答案 0 :(得分:5)

当您将字符串与==

进行比较时,您正在将字符串与.equals(s)进行比较

而不是,例如,

if(y == "rock")  {

将其更改为

if(y.equals("rock"))

(您还应确保y不是null,无论是通过测试还是尝试捕获它。)

如果相同的字符串对象位于==的两侧,则将==的字符串计算结果为true。

比较字符串与equals(s)比较它们的值,无论它们是否是同一个对象......显然,如果它们发生是同一个对象,它将始终评估为true

答案 1 :(得分:1)

在java中,您不会按x == y比较两个字符串。相反,您可以使用x.equals(y)进行比较。这解释了为什么那些if语句不起作用。