2012-10-01 108 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 –

相關問題