Java 使用“时字符串比较失败”==&引用;?
我是一个极端的编码高手,我才刚刚开始。我设计了一个石头剪刀游戏,但不明白为什么它不起作用。由于某些原因,用户输入在if语句中不起作用。请看一看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
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我不是想以这样或那样的方式争论。我只是喜欢这个图案的名字。:)我并不是说你应该使用它,我只是给了你一个关于另一种方法的建议,这种方法可能更为用户友好。就这么简单。就像我说的,我是新来的,谢谢你帮我。太快了!作为将来的参考,如果你能花点时间来确定哪些是不起作用的,这将是很有帮助的。你没有告诉我们症状,更不用说一段特定的代码,当你认为它会做另一件事时,它做了一件事。哇。就这么简单。就像我说的,我是新来的,谢谢你帮我。太快了!作为将来的参考,如果你能花点时间来确定哪些是不起作用的,这将是很有帮助的。您没有告诉我们这些症状,更不用说一段特定的代码了,它做了一件事,而您认为它会做另一件事。