我试图做一个比较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);
        }
    }

07-24 09:34