0

これはこの問題に対する私の試みです。どうすれば 0 を配列の最後に移動できますか? 0 要素を end 要素と交換しようとしましたが、そうではありませんでした...

public void removeMiddle()  {
    int pos = values.length/2;
    int n = values.length
    if (n%2 == 0)  {
        int fMid = pos - 1;
        values[pos] = 0;
        values fMid = 0;
    } else  {
        int j = n-1;
        int k = j/2;
        int l = k+1;
        int m = n-l;
        values[m] = 0;
    }
}

Array  =  {5, 2, 7, 9, 1, 3, 2, 4}
result =  [5, 2, 7, 0, 0, 3, 2, 4]
Expected: [5, 2, 7, 3, 2, 4, 0, 0]

Array  =  {5, 2, 7, 9, 1, 3, 2}
result =  [5, 2, 7, 0, 1, 3, 2]
Expected: [5, 2, 7, 1, 3, 2, 0]
4

5 に答える 5

1

配列をリストに変換し、ゼロを削除して追加し直し、リストを配列に変換します。

于 2013-04-08T08:12:30.867 に答える
1

ヒント:System.arraycopy()最後の要素を 0 に設定してから使用します。

または、ループを使用します。

于 2013-04-08T08:09:46.493 に答える
0

これを試してみてください: 理解しやすく、実装しやすいと思います。

public static void main(String[] args) {
    int[] arr = { 5, 0, 7, 9, 1, 3, 0 };
    int index = 0;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] != 0) {
            arr[index++] = arr[i];
        }

    }

    Arrays.fill(arr, index, arr.length, 0);
    System.out.println(Arrays.toString(arr));
}

入力:

{ 5, 0, 7, 9, 1, 3, 0 }

出力:

[5, 7, 9, 1, 3, 0, 0]
于 2013-04-08T08:27:20.503 に答える
0

おそらく、LinkedList 構造を使用して、配列の先頭にすべての非 0 要素を追加し、最後にすべて 0 を追加することができます。

    //initial array
    Integer[] array ={1,2,5,8,0,9,10};

    //converted array to List
    ArrayList<Integer> inputList= new ArrayList<Integer>(Arrays.asList(array));

    //secondary list 
    LinkedList<Integer> outputList = new <Integer>LinkedList();


    for(Integer x:inputList){
        int val= Integer.parseInt(x.toString());
        if(val !=0){
            //add non 0 values at the start
            outputList.addFirst(x);
        }else{
            //add 0's at the end
            outputList.addLast(x);
        }
    }

    //convert back to array
    Integer[] outputArray = new Integer[outputList.size()];
    outputArray = outputList.toArray(outputArray);
于 2013-04-08T08:40:44.327 に答える
0

前に誰かが言ったように、配列をリストに変換し、ゼロを削除して追加し直し、リストを配列に変換し直すことができます。または、ゼロからそれが必要で、配列の長さがわかっている場合は、1 つの配列 (array1 など) を作成し、配列の最後まで元の配列(たとえば配列)をスキャンします。配列にゼロ以外の数値が含まれている場合は、それを配列 (array1) に挿入するだけです。スキャンが完了したら、残りの配列インデックスにゼロを追加するだけです。

これがお役に立てば幸いです。

于 2013-04-08T08:45:02.840 に答える