我的职能是否存在逻辑错误?

时间:2015-04-04 17:20:59

标签: java android

我正在尝试制作一个比较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;
}

3 个答案:

答案 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';

Demo