2016-04-07 6 views
-1
test[0] = "one"; 
test[1] = "two"; 
test[2] = "one"; 
test[3] = "three"; 

「1」の出現をすべて削除しますが、配列、コレクション、セット、またはマップのクラスは使用できません。なぜ私が立ち往生したのか、それが制限のためでなければ、私はそれらを取り除くことができるでしょう。配列、コレクション、セット、またはマップのクラスを使用せずに配列から削除するには?

+3

は、なぜあなたはそのような制限がありますか:中

String[] test = new String[]{"one", "two", "one", "three"}; System.out.println("Before:"); System.out.println(Arrays.toString(test)); test = removeFromArray(test, "one"); //Call our method System.out.println("\nAfter:"); System.out.println(Arrays.toString(test)); 

結果:

次のことを実行していますか? –

+2

具体的にしてください。意図した結果は何ですか? '[null、two、null、three]'、 '[two、three、null、null]'または '[2,3]'のようなものですか? –

+0

私は[2、3]を印刷する必要があります – James

答えて

1

あなたがそうのようなメソッドを持つことができます:

public static String[] removeFromArray(String[] inputArray, String removeString) { 
    int removeStringOccurences = 0; 
    for (String currString : inputArray) { 
     if (currString.equals(removeString)) { 
      removeStringOccurences++; 
     } 
    } 
    String[] result = new String[inputArray.length - removeStringOccurences]; 
    int index = 0; 
    for (String currString : inputArray) { 
     if (!currString.equals(removeString)) { 
      result[index] = currString; 
      index++; 
     } 
    } 
    return result; 
} 

を私たちには、削除する回数をStringを確認するには、この最初のチェックが発生し、元String[]の長さに基づいて新しいString[]を作成し、望ましくない時間、すなわちStringが差し引かれます。

Before: 
[one, two, one, three] 

After: 
[two, three] 
+1

ありがとうございます!それはすべてをカバーしています! – James

+0

私はどのようにしてString [] result = new String [inputArray.length - removeStringOccurences]を作成できますか?型としてP [] result = new P [inputArray.length - removeStringOccurences];のような変数です。それは動作しません。 – James

+0

@James、あなたが扱っている 'Object'の場合、' Object P'があなたが別の方法で削除しようとしているものが何回出現したかをチェックする必要があります。しかし、配列の長さを定義することは同じです。したがって、P [] result = new P [inputArray.length - removeStringOccurences];が発生する必要があります。 – robotlos

0

あなたの問題を解決する最も適切な方法は、要素の後にあるすべての要素を取り除き、削除して、それらを前面に移動することです。しかし、これは1つの未使用要素のトレイルを残すでしょう。
削除する要素のない新しい配列を作成することもできます。

public void removeFromArrayShift(Object[] arr,int index) { 
    for(int i = 0;i< arr.length -1;i++){ 
     if(i >= index) 
      arr[i]=arr[i+1]; 
    } 
    arr[arr.length-1]=null; 
} 

public Object[] removeFromArrayNew(Object[] arr, int index) { 
    Object[] n = new Object[arr.length - 1]; 
    for(int i = 0; i < n.length;i++) 
     if(i>= index) 
      n[i] = arr[i+1]; 
     else 
      n[i] = arr[i]; 
    return n 
} 

アクセス可能であれば、後でSystem.arrayCopyで最適化することができます。 ;)

関連する問題