在Java中比较字符串数组中的这两个元素有什么错?
Java新手和我被困在一些看起来非常简单的事情上。我为我正在构建的一个游戏编写了一个算法,使用TDD,我的所有测试都通过了,但实际的游戏并没有返回正确的反馈。相反,每当我猜到一个正确的字母时,它就会返回一个w,并且应该返回一个b 背景 游戏首先生成一个4个字符的随机码。游戏的目的是输入一个猜测并尝试匹配密码。反馈类应该告诉我,与代码相比,我的猜测是热的还是冷的 我把猜测和密码传给全班同学并计算反馈。猜测是一个字符串,我使用split将其转换为字符串数组。密码也是一个字符串数组,我随机为它生成4个不同的字符串值。我试着检查guess和secret code中的一个元素是否都是字符串,并且在这两个元素上都是真的 问题 问题是,我的完全匹配if语句从未执行过。我读到你应该用equals来代替,也试过了,但是得到了一个错误 有人能帮忙吗 这是我的反馈课: 公开课反馈{在Java中比较字符串数组中的这两个元素有什么错?,java,arrays,string,comparison,Java,Arrays,String,Comparison,Java新手和我被困在一些看起来非常简单的事情上。我为我正在构建的一个游戏编写了一个算法,使用TDD,我的所有测试都通过了,但实际的游戏并没有返回正确的反馈。相反,每当我猜到一个正确的字母时,它就会返回一个w,并且应该返回一个b 背景 游戏首先生成一个4个字符的随机码。游戏的目的是输入一个猜测并尝试匹配密码。反馈类应该告诉我,与代码相比,我的猜测是热的还是冷的 我把猜测和密码传给全班同学并计算反馈。猜测是一个字符串,我使用split将其转换为字符串数组。密码也是一个字符串数组,我随机为它生成4个
public String[] guess;
public String[] secretCode;
public String[] feedback;
public String[] get(String[] guess, String[] secretCode) {
this.guess = Arrays.copyOf(guess, guess.length);
this.secretCode = Arrays.copyOf(secretCode, secretCode.length);
feedback = new String[this.secretCode.length];
findExactMatches();
findNearMatches();
findNoMatches();
sortFeedback();
return feedback;
}
public void findExactMatches() {
for (int i = 0; i < guess.length; i++) {
if (guess[i] == secretCode[i]) {
feedback[i] = "b";
guess[i] = "x";
secretCode[i] = "x";
}
}
}
public void findNearMatches() {
for (int i = 0; i < guess.length; i++) {
if ( Arrays.asList(secretCode).contains(guess[i]) && guess[i] != "x" ) {
feedback[i] = "w";
int matched_symbol_index = Arrays.asList(secretCode).indexOf(guess[i]);
secretCode[matched_symbol_index] = "x";
}
}
}
public void findNoMatches() {
for (int i = 0; i < guess.length; i++) {
if ( feedback[i] == null ) {
feedback[i] = " ";
}
}
}
public void sortFeedback() {
Arrays.sort(feedback);
}
}
比较字符串时,请使用等于而不是==。String.equals将比较内容,而==将比较标识,即它们是否为同一对象
所以
应该是
guess[i].equals(secretCode[i])
如果你想了解更多,那么你可以做==如果你输入字符串。但这完全是额外的内容
编辑:另外,正如johnchen902在评论中所说:
猜猜[i]!=x应该是!猜猜[i].equalsx.在findNearMatches中
比较字符串时,请使用等于而不是==。String.equals将比较内容,而==将比较标识,即它们是否为同一对象
所以
应该是
guess[i].equals(secretCode[i])
如果你想了解更多,那么你可以做==如果你输入字符串。但这完全是额外的内容
编辑:另外,正如johnchen902在评论中所说:
猜猜[i]!=x应该是!猜猜[i].equalsx.在findNearMatches中
这些是字符串,因此您应该使用equals,即guess[i].equalsecretcode[i]
猜测[i]==secretCode[i]将比较两个字符串操作符的引用,比较您不想要的对象在内存中的位置
请看这个了解更多-
guess[i]!=x也同样适用,因此您将使用!guess[i]。equalsx这些是字符串,因此您应该使用equals,即guess[i]。equalssecretCode[i]
猜测[i]==secretCode[i]将比较两个字符串操作符的引用,比较您不想要的对象在内存中的位置
请看这个了解更多-
guess[i]!=x也同样适用,因此您将使用!guess[i]。equalsx将guess[i]==secretCode[i]替换为guess[i]。equalssecretCode[i]和guess[i]!=x替换为!guess[i]。equalsx
==参考等式测试
.equals测试值是否相等
你可以找到更多信息
将guess[i]==secretCode[i]替换为guess[i]。equalsecretcode[i]并将guess[i]!=x替换为!guess[i]。equalsx
==参考等式测试
.equals测试值是否相等
你可以找到更多信息
猜[i]!=x应该是!猜[i].equalsx.在FindNearMatchesHanks!我已经读了好几遍关于equals的书,但我猜我读错了。我试图用equalsguess[i],secretCode[i]来代替你描述的方式。猜[i]!=x应该是!猜[i].equalsx.findNearMatchesThanks!我已经读了好几遍关于equals的书,但我想我读错了。我试着做equalsguess[I],secretCode[I]与你描述的方式不同。我读到你应该使用equals来代替。我也尝试过使用equals,但出现了一个错误。如果你告诉我们错误是什么,这会有所帮助,因为修复它可能是唯一真正的解决方案。-1;这个问题已经在谷歌的这里和其他地方被询问和回答了5亿次。作为补充说明,你应该避免重复调用for循环中的Arrays.asList。要么使用原始数组并编写自己的contains和indexOf方法;要么坚持使用一些ArrayList。谢谢Gyro!这是一个有用的提示。我接受了你的建议并使用了自己的方法。我读到你应该使用equals,也尝试过,但出现了一个错误。如果你告诉我们那个错误是什么,因为修复它可能是唯一真正的解决方案。-1;这个问题已经在Google的这里和其他地方被询问和回答了5亿次。作为补充说明,您应该避免在for循环中重复调用Arrays.asList。或者使用原始数组编写您自己的contains和indexOf方法;或者sti和一些ArrayList联系。谢谢你,Gyro!这是一个有用的提示。我接受了你的建议,使用了我自己的方法。非常感谢!我知道我现在做错了什么。非常感谢你描述了我是如何做的
这两种方法比较和链接。非常感谢!我明白我现在做错了什么。非常感谢您对这两种方法的比较和链接的描述。非常感谢您的链接。这很有帮助。非常感谢你的链接。这很有帮助。
public String[] guess;
public String[] secretCode;
public String[] feedback;
public String[] get(String[] guess, String[] secretCode) {
this.guess = Arrays.copyOf(guess, guess.length);
this.secretCode = Arrays.copyOf(secretCode, secretCode.length);
feedback = new String[this.secretCode.length];
findExactMatches();
findNearMatches();
findNoMatches();
sortFeedback();
return feedback;
}
public void findExactMatches() {
for (int i = 0; i < guess.length; i++) {
if (guess[i].equals(secretCode[i]) ) {
feedback[i] = "b";
guess[i] = "x";
secretCode[i] = "x";
}
}
}
public void findNearMatches() {
for (int i = 0; i < guess.length; i++) {
if ( Arrays.asList(secretCode).contains(guess[i]) && !guess[i].equals("x") ) {
feedback[i] = "w";
int matched_symbol_index = Arrays.asList(secretCode).indexOf(guess[i]);
secretCode[matched_symbol_index] = "x";
}
}
}