0

入力配列から重複した文字を取得し、すべての一意の文字を含む新しい配列を出力するプログラムを作成する必要があります。

それはすべて機能します。文字が取り出される場合を除いて、その新しい配列の最後に空のボックスが残ります。

public class Deleter {

public static void main (String[] args){
    Scanner keyboard = new Scanner(System.in);

    char[] initialInputArray = new char[15];

    System.out.println("How many characters do you wish to enter?");

    int size = keyboard.nextInt();

    while ( size > initialInputArray.length ) {
        System.out.println("Error. Enter smaller number.");
        size = keyboard.nextInt();
    }
    if( initialInputArray.length <= 15) {           
        for ( int counter = 0; counter < size; counter++ ){             
            initialInputArray[counter] = keyboard.next().charAt(0);         
        }
        {

        }
    }

    deleteRepeats(initialInputArray, size); 
    //Comeback to print out array
    {
        for ( int helloWorld = 0 ; helloWorld < size ; helloWorld ++)
            System.out.print(  initialInputArray[helloWorld] );
    }
}



//"deleteReapets" method begins, looking for repeated user inputs
public static char[] deleteRepeats (char[] methodArray, int sizeTwo) {

    if (sizeTwo == 0)
        return methodArray;

    if (sizeTwo == 1)
        return methodArray;

    int uniqueCharacter = 1; 
    //Start at the second entered character.

    for (int x = 1; x < sizeTwo; ++x) { 
        int y;

        for (y = 0; y < uniqueCharacter; ++y) {
            if (methodArray[x] == methodArray[y]) break; // break if we find duplicate.
        }


        if (y == uniqueCharacter) {
            methodArray[uniqueCharacter] = methodArray[x]; // add
            ++uniqueCharacter; // increment uniqueCharacter...[0,uniqueCharacter) is still "unique char list"

        }
    }
    while ( uniqueCharacter < sizeTwo ) {
        methodArray[uniqueCharacter] = 0;
        uniqueCharacter++;

    }

            return methodArray;
}

}

4

3 に答える 3

1

その空のボックスは、配列の最後に追加したヌル文字です。一意の文字数(入力サイズよりも小さい場合があります)sizeに応じて調整していないため、これらを印刷しています。新しい配列を作成していないので、からを返す必要はありません。代わりに、一意の文字の数を返すことができます。このようにして、呼び出し側プログラムは印刷する数を認識します。char []deleteRepeats

deleteRepeats割り当てでを返す必要がある場合char[]は、に正確に等しい長さの新しい配列を割り当て、uniqueCharacterそれに一意の文字をコピーして、それを返す必要があります。size呼び出し側プログラムは、入力の最初の要素を出力するのではなく、その新しい(そしてより短い)配列を出力することができます。

于 2012-09-12T01:51:10.440 に答える
1

おそらく最も簡単な方法は、charの配列のサイズに合わせて新しい配列を作成し、その中にすべてのcharをコピーすることです。アレイの問題は、一度初期化するとサイズを変更できないことです。arrayListsに精通している場合は、それらを使用することをお勧めします。しかし、そうでない場合は、このようなことを試してください...

int count = 0;
for(int i = 0; i < initialInputArray.size; i++){
        count++;
}

char[] newArray = new char[count];


for(int i = 0; i < count; i++){
        newArray[i] = initialInputArray[i];
}
于 2012-09-12T01:53:04.467 に答える
0

HashSetを使用して重複を削除し、 char をCharacterにラップすることをお勧めします。このようなもの:

public static Character[] deleteRepeats (char[] methodArray){
    HashSet<Character> set = new HashSet<Character>();

    for(int index = 0; index < methodArray.length; index++){
        set.add(methodArray[index]);
    }

    return set.toArray(new Character[set.size()]);
}

だからあなたの主な方法では、あなたがすることは次のようなものです:

Character[] charArray = deleteRepeats(methodArray);
for(int index = 0; index < charArray.length; index++){
    System.out.println(charArray[index]);
}
于 2012-09-12T02:00:13.140 に答える