2017-01-19 43 views
-1

我寫一個程序使用以下程序在一個字符串去除連續重複字符:循環和布爾沒有終止

static void main(String[] args){ 

String s = "abcdeedcbfgf"; 
removeConsecutiveDuplicate(s); 

} 

    static void removeConsecutiveDuplicate(String s) { 
     String tmp = ""; 
     boolean isEligible = false; 
     for (int i = 0; i < s.length() - 1; i++) { 
      if (s.charAt(i) == s.charAt(i + 1)) { 
       tmp = s.substring(0, i) + s.substring((i + 2), s.length()); 
       System.out.println(tmp); 
       s = tmp; 
       isEligible = true; 
       break; 
      } 
     } 

     System.out.println("s is:" + s); 
     while (isEligible) 
      removeConsecutiveDuplicate(s); 
    } 

輸出應該是:的aFGF當沒有連續的字符,它應該停止,因爲我在使用國旗的同時。但國旗正在獲得真正的價值。

我不知道它是怎麼做到的?

有人能幫我理解我在做什麼錯了嗎?

+0

這是因爲'isEligible'永遠不會更改它首次聲明的框架中的值。這將運行多久?因爲在我看來,你最終會快速用完堆 – CraigR8806

+3

即每次調用removeConsecutiveDuplicate()時,都會爲'isEligible'生成一個新的作用域和一個新的值。這個新值將不會傳回,也不會在初始while循環中顯示 – CraigR8806

+0

main()中的字符串's'在調用後將保持不變(當您按照需要進行操作時之後返回)。我想你會希望這個方法將修改後的's'返回給調用者。 –

回答

1

解決方法是從你的方法新的字符串:

static String removeConsecutiveDuplicate(String s) { 
    // existing code, except... 
    return tmp; 
} 

然後在調用方法,檢查其是否改變

String s = "abcdeedcbfgf"; 

while (true) { 
    String next = removeConsecutiveDuplicate(s); 
    if (next.equals(s)) 
     break; 
    s = next; 
} 

取出變量和概念完全是isEligible


而且,你不需要指定的第二個參數substring(),因爲如果省略「結束串的」是隱含的,那就是:

s.substring(i, s.length()) 

是相同的

s.substring(i); 
+0

s.substring(i,s.length)將刪除不一致的charcaters.tried下面的代碼:

 String removeConsecutiveDuplicate(String s){ \t String tmp = ""; \t \t for (int i = 0; i < s.length() - 1; i++) { \t \t if (s.charAt(i) == s.charAt(i + 1)) { \t \t \t tmp = s.substring(i, s.length()); \t \t \t System.out.println("tmp is:"+tmp); \t \t \t break; \t \t } \t } \t return tmp; \t }
它不起作用。 –

+0

哦,你仍然需要s.substring(0,i)'。你可以做's.substring(0,i)+ s.substring(i + 2)',而把第二個參數留給第二個* substring()調用。 –

+0

@波希米亞:感謝您的解決方案。它確實有幫助。你也可以解釋爲什麼我不能用「while循環」的方式來使用?你使用的方式正在工作..事實上,你用過的while循環必須最終成爲一個無限循環。 –

1

While while while(true)。你永遠不會讓它變成虛假的。 一旦有資格是真的,你正在陷入無限循環。 改爲if。 (iseligible)=> if(iseligible)。

+0

不,我不這麼認爲。提問者具有條件'i

+0

哎呀!我的錯 。現在改變了答案。謝謝@ Ole V.V. – BloomBlack

+0

當我更改爲IF時,它工作正常。但我無法理解如何?無論是while還是if,當我進行遞歸調用時,合格者都將更改爲false。你能幫我一下嗎? –