我正在尝试解决“实践”上的问题,并且我无法通过所有测试。
问题是:
编写一个称为equals的方法,该方法接受两个字符串数组,并且 如果它们相等,则返回true;也就是说,如果两个数组都相同 长度,并在每个索引处包含等效的字符串值。
我尝试了以下代码,但是对输入的测试
equals({"a", "b", "a", "c", "a", "d", "a", "e", "a"}, {"x", "b", "a", "c", "a", "d", "a", "e", "a"})
,但无效。
public static boolean equals (String [] txt1, String [] txt2){
boolean result=false;
if(txt1.length==txt2.length){
for(int i=0; i<txt1.length; i++){
if(txt1[i].equals(txt2[i])){
result = true;
}
else {
result = false;
}
}
}
else {
return false;
}
return result;
}
预期收益:false
我的回报:true
答案 0 :(得分:2)
问题出在循环中:
for(int i=0; i<txt1.length; i++){
if(txt1[i].equals(txt2[i])){
result = true;
}
else {
result = false;
}
}
if
将针对每个元素执行,因此从本质上讲,您的代码仅检查两个数组的最后一个元素是否相同,因为它会覆盖以前的result = false;
出现。
正确的解决方案是,一旦单个元素不同,立即停止并返回false
:
for(int i=0; i<txt1.length; i++){
if(txt1[i].equals(txt2[i])){
result = true;
}
else {
return false;
}
}
答案 1 :(得分:1)
请参阅注释中的说明:
public static boolean equals(String[] txt1, String[] txt2) {
if (txt1.length == txt2.length) {
for (int i = 0; i < txt1.length; i++) {
if (txt1[i].equals(txt2[i])) {
// do nothing
} else {
// at this moment you know that arrays are different
// so you can return false without checking the rest
// of the array
return false;
}
}
// here you checked all array, you know that each element is
// same, because if it wouldn't, it would return false already
// so you can return true now
return true;
} else {
return false;
}
}
可以对您的代码进行一些改进,再次阅读注释:
public static boolean equals(String[] txt1, String[] txt2) {
if (txt1 == txt2) {
// booth are null or booth are same instance
return true;
}
if(txt1 == null || txt2 == null) {
// one of the arrays is null so code bellow yould fail
return false;
}
if (txt1.length == txt2.length) {
for (int i = 0; i < txt1.length; i++) {
if (!txt1[i].equals(txt2[i])){
// equal rewriten to not equal
return false;
}
}
return true;
}
// no need to write else since every branch in if will result in return
return false;
}
答案 2 :(得分:0)
在for
循环之后,您应该检查数组是否不相等,如果相等,则返回false。如果程序没有返回false,则返回true。
public static boolean equals(String[] txt1, String[] txt2) {
if (txt1.length == txt2.length) {
for(int i = 0; i < txt1.length; i++) {
if(!txt1[i].equals(txt2[i])) {
return true;
}
}
} else {
return false;
}
return true;
}