相同的代码给出不同的结果

时间:2014-03-09 12:03:44

标签: java logic

对于相同的代码我得到2个不同的结果(几乎以相同的方式编写)。 消费税来自: codingbat

消费税是:

“给定一个字符串,返回一个删除所有”yak“的版本,但”a“可以是任何字符。”yak“字符串不会重叠”。

“codingbat”的正式解决方案是:

public String stringYak(String str) {
  String result = "";

  for (int i=0; i<str.length(); i++) {
// Look for i starting a "yak" -- advance i in that case
if (i+2<str.length() && str.charAt(i)=='y' && str.charAt(i+2)=='k') {
  i =  i + 2;
} else { // Otherwise do the normal append
  result = result + str.charAt(i);
}
}

return result;
}

我的解决方案是:

public String stringYak(String str){
        int len = str.length();
        String resultNoYak = "";
        for (int i=0;i<len;i++){        
                if ((i+2<len)&&(str.charAt(i)=='y')&&(str.charAt(i+3)=='k'))    {
                i=i+2;
            }
            else {
                resultNoYak = resultNoYak + (str.charAt(i));    
            }
        }
    return resultNoYak;
}

}

输入:yakpak

第一个代码返回:
     帕克(正确)

我的代码返回:
     yakpak(不正确)

这可能是什么原因?

3 个答案:

答案 0 :(得分:0)

这一行

if ((i+2<len)&&(str.charAt(i)=='y')&&(str.charAt(i+3)=='k'))

应该是

if ((i+2<len)&&(str.charAt(i)=='y')&&(str.charAt(i+2)=='k'))

答案 1 :(得分:0)

第一个代码

str.charAt(i+2)=='k'

您的代码

str.charAt(i+3)=='k'

答案 2 :(得分:0)

在代码中第三个条件导致问题。 这一行:

if ((i+2 < len) && (str.charAt(i) == 'y') && (str.charAt(i+3) == 'k'))

应该是:

if ((i+2 < len) && (str.charAt(i) == 'y')&&(str.charAt(i+2) == 'k'))

应该可以正常工作:)