2016-07-23 110 views
-4

當我給出的輸入爲mama下面的代碼打印mamaa,但我只想輸出爲ma。有什麼問題是代碼如何使用java刪除字符串中的重複字符?

import java.util.*; 

class Duplicate1 { 

    public static void main(String args[]) { 
     String str; 
     Scanner s=new Scanner(System.in); 
     System.out.println("enter the string"); 

     str=s.nextLine(); 
     String result=""; 
     char c=str.charAt(0); 
     result=result+c; 

     for(int i=1; i<str.length(); i++) { 
      char d = str.charAt(i); 
      for(int j=0; j<i+1; j++) { 
       if(d != result.charAt(j)) { 
        result=result+d; 
       } 
      } 
     } 
     System.out.println(result); 
    } 
} 
+0

當我給「媽媽」輸入它打印「mamaa」..但我想輸出爲「馬」。代碼有什麼問題..幫助我! –

+2

歡迎來到SO。請閱讀這篇關於如何提出一個好問題的文章,然後相應地進行格式化。這樣你將有更多的機會獲得有用的答案。 http://stackoverflow.com/help/how-to-ask – lmazgon

+2

請注意:不要在評論中放置更多信息,而是更新您的問題。而且請:你希望我們幫忙,你至少需要3分鐘**才能正確**格式化你的問題! – GhostCat

回答

0

我可以看到一些錯誤。但是,由於這顯然是一項家庭作業或其他學習練習,因此您需要學習找出自己的錯誤。所以這裏是一個提示。

提示:您只是測試與第一個字符重複的字符。 (再次閱讀你的代碼。)

最後,這裏有上調試自己的代碼的一些想法:

  1. 讀你寫的代碼,並試圖在同一時間精神上執行它,一個聲明。你寫的實際上是的陳述會做你需要他們做的事嗎?

  2. 學習使用調試器,以及如何單步執行,設置斷點並查看局部變量的值。

+0

兄弟我已經將值0更改爲我在for循環..仍然是我提到的相同的錯誤 –

+0

1)我不是你的「兄弟」。 2)我說「我可以看到**一些**錯誤」。 3)你是否已經完成了我在其餘答案中提出的建議? –

1

請讓自己某種筆&紙測試看起來應該事端這樣的:

init result = "m"; 

| i | j | d | c | comparison | result | 
|---|---|---|---|------------|--------| 
| 1 | 0 | a | m | a != m  | ma  | 
| 1 | 1 | a | a | a != a  | ma  | 
| 2 | 0 | m | m | m != m  | ma  | 
| 2 | 1 | m | a | m != a  | mam | 
| 2 | 2 | m | m | m != m  | mam | 
| 3 | 0 | a | m | a != m  | mama | 
| 3 | 1 | a | a | a != a  | mama | 
| 3 | 2 | a | m | a != m  | mamaa | 
| 3 | 3 | a | a | a != a  | mamaa | 

和/或使用調試器,它是在的allmost任何Java編輯器(NetBeans的標準,的IntelliJ, Eclipse,...),並通過你的應用程序來了解爲什麼出現問題。

你基本上做的是添加當前處理的字符,如果它不匹配結果字符串中的字符。對於當前結果字符串中包含的每個不匹配字符,將在結果字符串的末尾添加一個新字符0​​。

相反,如果字符在結果字符串中尚不可用,應該只添加該字符。這可以通過在外部循環中保留布爾標誌found(用false初始化)來完成,該布爾標誌指示是否找到匹配,並且在內部循環中,如果找到匹配,則僅將該標誌設置爲真,並繼續迭代內部循環循環和內循環完成後,檢查found標誌,並只添加當前存儲在d中的字符(如果發現等於false)。

更直接的解決方案是檢查當前結果字符串是否只是contains某個字符,如果不是,則只添加字符。這會使內部循環完全冗餘。

相關問題