2016-05-21 1 views
-1

複雑な配列操作を行う必要があり、難しかったです。私はあなたに助けを求めるかもしれないと思った。配列の操作 - アイテムを上に移動してJavaで類似したものを追加

とにかく、私がやっていることは、基本的に次のとおりです。 私は数字の配列を持っているとしましょう。だから、私は何をしたいの配列の先頭にすべての要素を移動し、したがって、それらのzereosで要素を埋めることです。

説明する例を使用します。 のが配列であるとしましょう:私は何をしたいことはある{4,4,0,2,0,2}

{4,4,2,2,0,0}

だから、すべての数字は基本的にしてソートされた一つの領域です。 は今、私がしたい2つ目は、すべて同様の番号を追加しているので、我々は、上記の例を続ける場合:今{8,4,0,0,0,0}

、私は何をしようとしたことは基本的に全体のループを実行し、バック時に次の項目を移動しています私はゼロを見て、それをゼロで置き換えますが、それはいくつかの問題につながっています。

いくつかの提案はすばらしいでしょう。 Thansk

編集:私は、並べ替えなどとほかの少しを行う方法を考え出し

は、ここで私が持っているものです。あなたがそれをより良くするための提案があれば教えてください。

for(int j = 0; j < row.length ; j++){ 
     for(int i = 0 ; i < row.length ; i++){ 
      if(row[i] == 0){ 
        row[i] = row[i+1]; 
        row[i+1] = 0; 
      } else if(row[i] == row[i+1]){ 
        row[i] = row[i+1] + row[i]; 
        row[i+1] = 0; 
       } 
      } 
     } 
    } 

ただし、ソートはすべて問題ありませんが、同様の要素が追加されている場合はわずかな問題があります。 ソート後に{2,2,2,2,0,0}のようなものがあれば、私の追加部分は次のようになります:{8,0,0,0,0,0}これは私が望むものではありません。必要なもの{4,4,0,0,0,0}

+0

ですか?つまり、配列{2,4,2,0,4}で、{8,4,0,0,0}か{2,4,2,4,0}が生成されるはずですか?または、他の何か ? –

+0

。 {2,4,2,0,4}のような配列の場合、{2,4,2,4,0}を生成するはずです。そのため注文が必要です。 また、私は気づいたばかりです。それは基本的に2048のようなものです。たぶん、私は誰かのレクリエーションを見に行くでしょう。 :P – Azazel

答えて

1

これを行う簡単な方法は、2つの部分で作業を分割することです。ペアを結合し、要素を左に押します。操作の順序について:

pushLeft then combine 
Orignal array: {4,2,0,2,0,4} 
After pushLeft: {4,2,2,4,0,0} 
After combine: {4,4,4,0,0,0} 

この順序では、値を結合する際に作成する穴を処理する必要があります。

combine then pushLeft 
Orignal array: {4,2,0,2,0,4} 
After combine: {4,4,0,0,0,4} 
After pushLeft: {4,4,4,0,0,0} 

これらは、各機能ごとに単純なループを使用して実装できます。 1つのループですべてを実行する可能性もあります(結合して左に押す)が、もっと難しいです。

私のコードは、以下の(第二の方法)ですが、あなたはそれが前に自分で試してみるすることもできます。それは2048年かのように

public static int[] goLeft(int[] a) { 
    int[] arr = a.clone(); 
    for (int j = 0, i = 0; j < arr.length; j++) { 
     if (arr[j] != 0) { 
      arr[i] = arr[j]; 
      if (i++ != j) arr[j] = 0; 
     } 
    } 
    return arr; 
} 

public static int[] combine(int[] a) { 
    int[] arr = a.clone(); 
    for (int j = 1, i = 0; j < arr.length; j++) { 
     if (arr[i] == 0 && arr[j] != 0) { 
      i = j; 
     } else if (arr[j] != 0 && i != j) { 
      if (arr[j] == arr[i]) { 
       arr[i] *= 2; 
       arr[j] = 0; 
       i = j; 
      } else { 
       i = j; 
      } 
     } 
    } 
    return arr; 
} 

public static void main(String[] args) { 
    int[] a1 = new int[] {4,2,0,2,4}; 
    System.out.println(Arrays.toString(a1)); 
    System.out.println(Arrays.toString(Main.goLeft(Main.combine(a1)))); 
    // [4, 4, 4, 0, 0] 
} 
関連する問題