我试图做一个比较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;
}
最佳答案
您的错误在第二个循环中:
当您发现number.charAt(i)
出现在fakecomputernumber
中的某个位置时,可以将number
的第i个字符更改为'y',这很好。但是您也将fakecomputernumber
的第i个字符更改为'x',这是错误的,因为fakecomputernumber
的第i个字符不等于number
的第i个字符。
如果fakecomputernumber为5606和number为6668:
在第一个循环之后,您将获得一个+,并且字符串变为:6y68和5x06。
sencond循环两次发现fakecomputernumber
中包含6:
第一次将字符串更改为yy68和xx06。
第二次将字符串更改为yyy8和xxx6。
因此,您得到的是+--
而不是+-
。
您应该做的是:
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[fakecomputernumber.indexOf(number.charAt(i))] = 'x';
fakecomputernumber = String.valueOf(myNameChars);
char[] myNameChars2 = number.toCharArray();
myNameChars2[i] = 'y';
number = String.valueOf(myNameChars2);
}
}