2

あるメソッドからメインに配列を戻すことについて質問があります。それは私をひどく苛立たせ始めており、私はこれに頭を悩ませることはできません。メソッドで配列を変更したとしても、メインで配列を表示すると、古い配列が表示されているように見えます。配列内の重複する番号を削除しようとしていますが、デバッガーでステップスルーしたので機能することがわかりましたが、元に戻してメインに戻った後、配列全体が再び表示されます。私がここで見逃しているのは簡単なことだと思います。誰かが私を正しい方向に向けてくれませんか?これが私のコードです...

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int[] numbers = new int[10];

    System.out.print("Enter 10 numbers: ");

    for (int x = 0; x < numbers.length; ++x)
        numbers[x] = input.nextInt();

    eliminateDuplicates(numbers);

    for (int y = 0; y < numbers.length; ++y)
        System.out.print(numbers[y] + " ");
}


public static int[] eliminateDuplicates(int[] numbers) {
    int[] temp = new int[numbers.length];
    int size = 0;
    boolean found = false;

    for (int x = 0; x < numbers.length; ++x) {

        for (int y = 0; y < temp.length && !found; ++y) {
            if (numbers[x] == temp[y])
                found = true;
        }
        if (!found) {
            temp[size] = numbers[x];
            size++;
        }
    found = false;
    }   

    int[] result = new int[size];
    for (int z = 0; z < result.length; ++z)
        result[z] = temp[z];

    return result;
}
}
4

6 に答える 6

5

この呼び出しを見てください:

 eliminateDuplicates(numbers);

戻り値を無視しています。おそらくあなたは望んでいた:

 numbers = eliminateDuplicates(numbers);

メソッドの戻り値を無視してはならないことをJavaに示す方法があればいいのにと思うことがあります。それは周りの多くの質問も節約するでしょうInputStream.read...

于 2012-08-13T06:19:48.407 に答える
3

そのはず:numbers = eliminateDuplicates(numbers);

メソッドから返された結果を本質的に無視していました。

于 2012-08-13T06:19:21.477 に答える
1

このようにしてください:

int[] result =eliminateDuplicates(numbers);
for (int y = 0; y < result.length; ++y)
    System.out.print(numbers[y] + " ");

また、あなたのeliminateDuplicates()メソッドでは、result配列を削除して配列を直接使用しますtemp。または、名前を変更tempresultて返します。次のコードは不要です:

int[] result = new int[size];
    for (int z = 0; z < result.length; ++z)
        result[z] = temp[z];
于 2012-08-13T06:19:58.410 に答える
0

あなたのメインでは、これを試してください:

numbers = eliminateDuplicates(numbers);
于 2012-08-13T06:20:06.550 に答える
0

メソッドの呼び出しは次のようになります-

numbers = eliminateDuplicates(numbers);

removeDuplicates関数によって返される結果をキャッチしていません。

于 2012-08-13T06:20:24.090 に答える
0

Javaでは、パラメーターは値によって渡されるnumbersため、in/outパラメーターとして使用することはできません。

たとえば、C#を使用している場合は、

 eliminateDuplicates(ref numbers);

しかし、他の人が指摘しているように、最も明白な問題は、結果を割り当てるのを忘れたことです:)

于 2012-08-13T06:29:32.273 に答える