2017-10-04 6 views
0

配列から要素を削除する際に問題が発生しました。outofBoundsjava.lang.exception "The string isn't in the array"のようなエラーが出ますが、配列から要素を削除し、すべてを下に移動

public void setDeleteItem(String deleteItem) throws Exception{ 
    for(int i = 0; i < arraySize; i++) {   
     if(deleteItem.equals(array[i])) { 
      array[i] = ""; 
      if(i < arraySize - 1) { 
       array[i] = array[i + 1]; 
       arraySize--; 
      } 
     } else if(!deleteItem.equals(array[i])) { 
      throw new Exception("This string isn't in the array"); 
     } 
    } 
} 
+1

あなたのコードは、その項目が最初の項目である場合にのみ機能します。そうでない場合は、「else」と入力します。他にも問題があります。 –

+0

これを修正する方法について私に指導を与えることができます –

+1

要素が存在するかどうかを判断する前に、配列全体を反復処理する必要があります今、最初の反復のチェックが真と評価されない場合、例外がスローされます。 – Mark

答えて

0

すべての不一致に対して例外をスローします。まず、配列内のすべての要素を反復処理し、例外を決定します。

public void setItem(String deleteItem) throws{ 
boolean match = false; 
for(int i = 0; i < arraySize; i++) {   
    if(delete.equals(array[i])) { 
     match = true; 
     array[i] = ""; 
     if(i < arraySize - 1) { 
      array[i + 1] = array[i] ; 
      arraySize--; 
     } 
    } 
} 
if(!match){ 
    throw new Exception("This str in the array"); 
} 
+0

外側のifブロックに戻り、forループの後にスローする方が簡単です。 – Mark

0

Java配列は固定長であるため、別の変数として長さを格納することは無意味です(必要ありません)。まず、要素の配列を検索します。見つからない場合は例外をスローします。それ以外の場合は、新しい配列を作成します。値をコピーし、配列をローカルフィールドに割り当てます。以下のような、

public void setDeleteItem(String deleteItem) throws Exception { 
    int p = -1; 
    for (int i = 0; i < array.length; i++) { 
     if (deleteItem.equals(array[i])) { 
      p = i; 
      break; 
     } 
    } 
    if (p == -1) { 
     throw new Exception("This string isn't in the array"); 
    } 
    String[] newArray = new String[array.length - 1]; 
    System.arraycopy(array, 0, newArray, 0, p); 
    System.arraycopy(array, p + 1, newArray, p, newArray.length - p); 
    array = newArray; 
} 

又は使用List(具体的には、ArrayList) - この機能を提供します。

0

各マッチで例外をスローしていますが、配列全体を確認してからエラーをスローする必要があります。 同じ目的で以下のソリューションを使用できます。 パッケージ実装。

import java.util.Arrays; 

public class DeleteFromArray { 

public static void delete(String[] array, String deleteItem) throws Exception { 
    boolean flag = true; 
    int i = 0; 
    while (flag && (i < array.length)) { 
     if (deleteItem.equals(array[i])) { 
      flag = false; 
     } else { 
      i++; 
     } 
    } 

    if (!flag) { 
     // once item found shift other items 
     while (i < array.length - 1) { 
      array[i] = array[i + 1]; 
      i++; 
     } 
     // copy array to new array 
     String[] array1 = new String[array.length - 1]; 
     System.arraycopy(array, 0, array1, 0, array.length - 1); 
     System.out.println(Arrays.toString(array1)); 
    } else { 
     throw new Exception("This string isn't in the array"); 
    } 

} 

public static void main(String[] args) throws Exception { 
    String[] array = new String[] { "one", "two", "three", "four" }; 
    String deleteItem = "five"; 
    delete(array, deleteItem); 
} 

} 
+0

これを試しましたか? –

関連する問題