java我的函数有逻辑错误吗?
我试图做一个函数,比较两个不同的4位数字
如果这些数字在同一个地方有一些数字,它将是+
,相同的数字但在不同的地方-
例如,如果一个数字是5606,另一个是6668,那么它应该产生+-
。然而,产生的是+--
我将数字改为x和y以防止一个数字被重复使用,但它仍然不起作用。我的密码有错误吗
public String comparenumbers(String number) {
result ="";
for (int i = 0; i < 4; i++) {
if (number.charAt(i) == fakecomputernumber.charAt(i)){
result += "+";
char[] myNameChars = fakecomputernumber.toCharArray();
myNameChars[i] = 'x';
fakecomputernumber = String.valueOf(myNameChars);
char[] myNameChars2 = number.toCharArray();
myNameChars2[i] = 'y';
number = String.valueOf(myNameChars2);
}
}
for (int i = 0; i < 4; i++) {
if (number.charAt(i) != fakecomputernumber.charAt(i) &&
fakecomputernumber.indexOf(number.charAt(i))!=-1){
result += "-";
char[] myNameChars = fakecomputernumber.toCharArray();
myNameChars[i] = 'x';
fakecomputernumber = String.valueOf(myNameChars);
char[] myNameChars2 = number.toCharArray();
myNameChars2[i] = 'y';
number = String.valueOf(myNameChars2);
}
}
if (result =="") {
result += "miss";
} else if (result =="++++") {
result = "Congratz you won!!!";
}
return result;
}
# 1 楼答案
问题在第二个循环中,如果
即第二个条件
fakecomputernumber.indexOf(number.charAt(i))!=-1
检查number
的第i个字符是否存在于除第i个字符外的任何fakecomputernumber
索引中,因为您已经在第一个条件中检查了它 最初如果因此,对于第二个循环的第一次迭代,您知道必须将
number
的第一个元素更改为y
,但您不知道将fakecomputernumber
的元素更改为x
。因此,要解决这个问题,只需改变路线到
完整代码
Demo
# 2 楼答案
代码正在按以下方式运行:
位置2的“+”符号,两个字符都是6
“-”标志由于:
我不确定问题陈述是否正确,因此在您共享相同的代码之前,无法修复您的代码
代码中的逻辑错误:
字符串是不可变的对象
如果我们有两个字符串foo和bar:
foo==bar将比较这两个对象的内存引用
福。等于(bar)将比较存储在内存引用中的值
所以,若要检查结果字符串中的内容,应该使用。等于(…)方法,并且还有您的逻辑错误
# 3 楼答案
您的错误在第二个循环中:
当您发现
number.charAt(i)
出现在fakecomputernumber
的某个地方时,您可以将number
的第i个字符更改为“y”,这很好。但是您还将fakecomputernumber
的第i个字符更改为“x”,这是错误的,因为fakecomputernumber
的第i个字符不等于number
的第i个字符如果FakeComputer编号为5606,编号为6668:
在第一个循环之后,您有一个+并且字符串变成:6y68和5x06
sencond循环两次发现
fakecomputernumber
中包含6:第一次将字符串更改为yy68和xx06
第二次将字符串更改为yyy8和xxx6
因此,您得到的是
+
,而不是+-
你应该做的是: