我正在尝试制作一个比较2个不同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;
}
答案 0 :(得分:1)
您的错误出现在第二个循环中:
当您发现number.charAt(i)
出现在fakecomputernumber
的某处时,您将number
的第i个字符更改为'y',这很好。但你也将fakecomputernumber
的第i个字符改为'x',这是错误的,因为fakecomputernumber
的第i个字符不等于{{1}的第i个字符。 }。
如果fakecomputernumber是5606且number是6668:
在第一个循环之后你有一个+并且字符串变为:6y68和5x06。
sencond循环找到两次,number
中包含6:
第一次将字符串更改为yy68和xx06 第二次将字符串更改为yyy8和xxx6。
因此,您获得了fakecomputernumber
而不是+--
。
你应该做的是:
+-
答案 1 :(得分:0)
代码按照以下方式运行:
&#34; +&#34;由于位置2的符号,两个字符都是6
&#34; - &#34;标志由于:
if(number.charAt(i)!=fakecomputernumber.charAt(i)&&fakecomputernumber.indexOf(number.charAt(i))!=-1)
5 6 true&amp;&amp;是的 - &gt; &#34; - &#34;添加到字符串
6 6假&amp;&amp;假
0 6真&amp;&amp;假的
6 8 true&amp;&amp;是(第二个字符串中存在6个) - &gt; &#34; - &#34;添加到字符串
我不确定问题陈述,因此无法修复您的代码,直到您共享相同的
代码中的逻辑错误:
字符串是不可变对象。
如果我们有两个字符串foo和bar:
foo == bar将比较这两个对象的内存引用。
foo.equals(bar)将比较存储器引用中存储的值。
所以,如果你想检查结果字符串中的内容,你应该使用.equals(..)方法,也有你的逻辑错误。
答案 2 :(得分:0)
问题出现在第二个循环中,如果
if(number.charAt(i)!=fakecomputernumber.charAt(i)&&fakecomputernumber.indexOf(number.charAt(i))!=-1)`
即第二个条件fakecomputernumber.indexOf(number.charAt(i))!=-1
检查number
的第i个字符是否存在于除第i个字符之外的fakecomputernumber
的任何索引中,因为您已在第一个条件中检查过它
最初如果
String fakecomputernumber="5606";
String number="6668";
//after first loop
result="+" //expected
number="6y68" //expexted
fakecomputernumber="5x06" //expected
//in the second loop if for the zero index
myNameChars[i] = 'x'; //wrong because i is not the index of fakecomputernumber character which is same to i index character of number
fakecomputernumber = String.valueOf(myNameChars);
因此,对于第二次循环的第一次迭代,您知道必须将number
的第一个元素更改为y
,但您不知道fakecomputernumber
的元素要更改为{{1}所以要解决问题,只需更改行
x
到
myNameChars[i] = 'x';
完整代码
myNameChars[fakecomputernumber.indexOf(number.charAt(i))] = 'x';