2017-02-25 11 views
2

文字配列に値を出力するプログラムを書くように求められました。この配列には重複した値が含まれていますが、出力には重複した文字が含まれてはなりません。 セットを使用しないでください。これが私が作ったものです。同じことをするための他の効率的な方法があるかどうかを教えてください。文字配列内の文字を重複なく印刷する方法は?

public class RemoveDuplication { 
    public static void main (String[] args){ 
    char[] a= new char[]{'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'}; 
    String s=Character.toString(a[0]); 

    for (int i=1; i<a.length; i++) { 
     if ((s.indexOf(a[i])) == -1) { 
     s = s + Character.toString(a[i]); 
     } else { 
     } 
    } 
    // if you want character array as result 
    char[] result = s.toCharArray(); 
    System.out.println(result); 
    } 
} 
+1

'System.out.println(Arrays.toString(result)); ' –

+1

こんにちはエリオット、提案をありがとう。 char配列を引数として受け取り、char配列の値のリストを出力する 'println'メソッドがオーバーロードされていることに注意してください。 – Vicky

答えて

1

あなたは過ぎています。

ジャストのために行く:そのビルダーオブジェクトに

StringBuilder builder = new StringBuilder().append(a[0]); 

、その後append()。そして最後に。 builder.toString()に電話してください。すべての面白いことの代わりに、s文字列変数を使用します。

文字列と文字の間を行き来するコードと、文字列の追加に+を使用するコードは同じです。非常に複雑すぎるもの。

+0

はい!あなたの提案バディ(y)のおかげで、 – Vicky

+0

あなたは非常に歓迎しています...そして面白い事:私はあなたがセットを使用することを許可されないと思った、それは私がその部分を言及しなかった理由です。 – GhostCat

+0

こんにちは、指定された文字が既に文字列ビルダーオブジェクトに存在するかどうかを知る方法。 if((s.indexOf(a [i]))== -1)sがStringBuilderの場合、このコード行は無効です。 – Vicky

1

Setオブジェクトを使用すると、それが実行されます。

Set<Character> s = new HashSet<>(); 
s.add('c'); 
s.add('c'); 
//c was only added once 

このような反復:StringBuilderにコードポイントを収集し、最終的にそれをプリントアウトし、次いで、

for(Character c: s) 
{ 
    System.out.println(c); 
} 
+0

Yeahh!その素晴らしい解決策が、私はセットを使用することが許可されていませんでした:( – Vicky

0

ストリームのみ異なるコード・ポイントにフィルタを文字:

System.out.println(
    str.chars().distinct().boxed() 
     .collect(Collector.of(StringBuilder::new, 
        StringBuilder::appendCodePoint, 
        StringBuilder::append))); 
0

私は毎回というユニークな要素を聞きますが私の頭に浮かびます。だからここsetsを使用して最も簡単な実装です:

char[] a= new char[]{'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'}; 

Set<Character> set = new HashSet<Character>(); //declare Set of Character type 
for(char c : a) 
     set.add(c);   //Add chars in 'a' to the set 

System.out.println(set); 

OUTPUT:[a、b、c]の

+0

ああ、質問が**私は答えを入力していた** **使用しないで言うように編集されたようだ。残っている。 –

0

あなたはこのようなものであるスピードアップするために何ができるか、文字Cがあるかどうかを確認バイナリ検索を使用して出力された文字配列A(印刷ではない)に格納されます。文字Cがリストにない場合はそれを印刷し、文字CをAに挿入(ソート)して(バイナリ検索を使用できるように)

関連する問題