你能帮我解释一下这段代码吗?

时间:2012-10-01 07:34:54

标签: java

我理解charAt部分,但另一部分我遇到了一些麻烦。这段代码的其余部分可以一步一步向我解释,所以我更清楚地理解它。感谢

public static boolean y(String str) {
    int i = 0;
    int j = str.length()-1;
    while (i != j && (j - i) != 1) {
        if (str.charAt(i) != str.charAt(j)) 
        {
            return false;
        }
        i++;
        j--;
    }
    return true;
}

opps我发了一个错误,而while语句假设是这个>> while(i!= j&&(j - 1)!= 1)

2 个答案:

答案 0 :(得分:5)

代码将确定str是否为回文。

i将表示从字符串的开头到中间的每个字符。 j将表示从字符串的结尾到中间的每个字符。

通过将值设置为0(第一个字符)来初始化ij初始化为字符串的长度减去1(最后一个字符)。

然后,您的代码会循环播放,比较ij代表的字符,直到它们不匹配为止,或者直到没有字符可供比较。

例如,鉴于回文“雷达”,代码可以比较:

  • r with r
  • a with a

然后终止。在奇长的回文中,显然不需要比较中间字符,因此i != j语句中的while

处理均匀长度的回文时,代码中存在问题。 ij会交叉,但永远不会相同。第二个条款(j - i) != 1似乎是为了解决这个问题而设计的,但它很快就会进行比较!

鉴于回文“pullup”,当i为2且j为3(即两个Ls)时,您将退出循环而不进行比较。这意味着当它应该返回false时,非回文偶数单词将返回true。

如果将整个where子句更改为:

where (j - i > 0)

您的代码适用于所有情况。

答案 1 :(得分:1)

它将字符串(位置i)的开头与字符串的结尾(位置j)进行比较,然后遍历到下一对字符(i + 1,j - 1),直到它到达字符串的中间位置,看看String是否是回文。