Java 使用“时字符串比较失败”==&引用;?

Java 使用“时字符串比较失败”==&引用;?,java,Java,我是一个极端的编码高手,我才刚刚开始。我设计了一个石头剪刀游戏,但不明白为什么它不起作用。由于某些原因,用户输入在if语句中不起作用。请看一看 package com.youtube.njillatactics; import javax.swing.JOptionPane; public class RPS { public static void main(String args[]){ //start message JOptionPane.sh

我是一个极端的编码高手,我才刚刚开始。我设计了一个石头剪刀游戏,但不明白为什么它不起作用。由于某些原因,用户输入在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;
}
}
package.com.youtube.njilla;
导入javax.swing.JOptionPane;
公共类RPS{
公共静态void main(字符串参数[]){
//开始消息
showMessageDialog(空,“欢迎来到尼克的石头剪刀游戏!”);
//获取用户输入并转换为小写
String userInput=JOptionPane.showInputDialog(“选择石头、布或剪刀”).toLowerCase();
//生成随机计算机输入
双计算机输入=Math.random();
//将用户输入与转换后的计算机输入匹配
showMessageDialog(null,匹配(用户输入,转换(计算机输入));
}
//将随机计算机输入转换为选择
公共静态字符串转换(双x){
如果(x<0.33){
返回“岩石”;
}否则如果(x<0.66){
返回“文件”;
}否则
返回“剪刀”;
}
//看看谁赢了
公共静态字符串匹配(字符串x、字符串y){
如果(x==y){
回“领带!”;
}否则
如果(x=“岩石”){
如果(y=“纸张”){
返回“计算机赢!”;
}否则
返回“用户赢!”;
} 
如果(x=“纸张”){
如果(y=“剪刀”){
返回“计算机赢!”;
}否则
返回“用户赢!”;
}
如果(x=“剪刀”){
如果(y=“岩石”){
返回“计算机赢!”;
}否则
返回“用户赢!”;
}否则
返回x+“,”+y;
}
}

当您应该将字符串与
.equals进行比较时,您正在将字符串与
==
进行比较

而不是比如说,

if(y == "rock")  {
换成

if(y.equals("rock"))
(您还应该通过测试或尝试捕捉来确保
y
不是
null
。)

如果相同的字符串对象位于
==
的两侧,则将字符串与
==
进行比较的结果为true


将字符串与
相等值进行比较
会比较它们的值,而不管它们是否是同一个对象…显然,如果它们恰好是同一个对象,它将始终计算为
true

当您应与
相等值进行比较时,您正在将字符串与
=
进行比较

而不是比如说,

if(y == "rock")  {
换成

if(y.equals("rock"))
(您还应该通过测试或尝试捕捉来确保
y
不是
null
。)

如果相同的字符串对象位于
==
的两侧,则将字符串与
==
进行比较的结果为true


比较
等于的字符串
会比较它们的值,不管它们是否是同一个对象……显然,如果它们恰好是同一个对象,它的计算结果总是
true
,在java中,您不会通过
x==y
来比较两个字符串。相反,您可以使用
x.equals(y)
进行比较。这就解释了为什么那些if语句不起作用。

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

另一个变体是
if(“rock”.equals(y))
”。即使我完全支持你的答案,用户可能并不总是准确地输入“rock”,所以你也可以输入y.equalsIgnoreCase(“rock”);这将使它对玩游戏的人来说更具普遍性game@aliteralmind我不是想以这样或那样的方式争论。我只是喜欢这个图案的名字。:)我并不是说你应该使用它,我只是给了一个建议,关于另一种可能更为用户友好的输入方法:)另一种变体是
如果(“rock.equals(y))
”,即使我完全支持你的答案,用户可能并不总是准确地输入“rock”,所以你也可以输入y.equalsIgnoreCase(“rock”);这将使它对玩游戏的人来说更具普遍性game@aliteralmind我不是想以这样或那样的方式争论。我只是喜欢这个图案的名字。:)我并不是说你应该使用它,我只是给了你一个关于另一种方法的建议,这种方法可能更为用户友好。就这么简单。就像我说的,我是新来的,谢谢你帮我。太快了!作为将来的参考,如果你能花点时间来确定哪些是不起作用的,这将是很有帮助的。你没有告诉我们症状,更不用说一段特定的代码,当你认为它会做另一件事时,它做了一件事。哇。就这么简单。就像我说的,我是新来的,谢谢你帮我。太快了!作为将来的参考,如果你能花点时间来确定哪些是不起作用的,这将是很有帮助的。您没有告诉我们这些症状,更不用说一段特定的代码了,它做了一件事,而您认为它会做另一件事。