2012-10-01 113 views
1

我明白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; 
} 

哎呀我做while语句假设是这个>>错误而(我= j的& &(j! - 1)= 1)

+4

这是什么:'!=!'?它是否编译? – keyser

+0

考虑在每个步骤的顶部和一行上创建一个变量表。然后,在每一行中,记下代码中每个下一步的变量内容。您将自动了解该程序的功能:) –

+0

@Keyser:当然,检查是由i!= j执行的? –

回答

1

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

+0

+1它的回文。 :) –

5

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

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

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

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

例如,给定的回文“radar`,代码可以比较:

  • ř随r
  • 一个与

,然后终止在奇数长度的回文,显然没有必要比较中间字符,因此您的while声明中的i != j

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

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

如果你改变了整个where子句:

where (j - i > 0) 

您的代码将所有的情况下工作。

+0

opps我犯了一个错误while语句假设是这个>> while(i!= j &&(j - 1)!= 1)而不是while(i!= j &&(j - i) !=!)sry关于那..这可能是它不会编译 –

+0

(j - 1!= 1)的原因,是不是j!= 2? –

+0

nope its 1 j!= 1 –

相关问题