2014-03-20 5 views
-3

Как удалить целое число по указанному индексу и как сжать myInts?Как удалить элементы из массива?

Это то, что я получил, но я все время получаю сообщение об ошибке.

public void deleteInt(int index) { 

    int[] newInts = Arrays.copyOf(myInts, myInts.length); 

    if (myInts[index] != 0) { 
     myInts[index] = 0; 

     for (int i : myInts) { 
      if (myInts[i] != 0) { 
       newInts[i] = myInts[i]; 
      } 
     } 
    } 
    myInts = newInts; 
    currentInt++; 
} 

Это ошибка, я получаю:

Исключение в потоке "основного" java.lang.ArrayIndexOutOfBoundsException: 11

+0

Зачем использовать массивы? –

+0

Почему downvotes? Это похоже на разумный вопрос, просто нужно немного подробнее. –

+0

@DonBranson догадывается, что они просто не знают, как это сделать, чтобы они проголосовали, но в любом случае у вас есть представление о том, как id обходится без использования arraylist? – user3439273

ответ

0

Этот код не использует улучшенный цикл должным образом:

for (int i : myInts) { 
     if (myInts[i] != 0) { 
      newInts[i] = myInts[i]; 
     } 
    } 

Он пытается прочитать элемент г из myInts, но я есть содержание элемента, а не его индекс. Итак, как только какой-то элемент содержит значение> массив, вы получаете исключение outofbounds.

public void deleteInt(int index) { 

    // can be 1 element shorter as we are going to erase 1 element 
    // also, copying the contents of the original array in is a waste of time 
    // so we just create it. 
    int[] newInts = new int[myInts.length-1]; 

    // the easiest way is to use an extra variable to track the insertions in the 
    // new array 
    int j=0; 
    for (int i=0; i < myInts.length; i++) { 
     if (i != index) { 
      newInts[j++] = myInts[i]; 
     } 
    } 

    // so now we have a new shortened copy of the array, but as the function is void, 
    // its life ends here :) 
} 
+0

это просто копирует индекс до конца, но не удаляет его – user3439273

+0

если у меня есть массив 1,2,3,4,5 и do deleteInt (3); я должен получить 1,2,3,5 – user3439273

+0

Да, я знаю, я неправильно понял ваш вопрос. Проверьте править, пожалуйста. – fvu

2

Для этого вы должны использовать что-то вроде ArrayList. Использование Array приводит к созданию кода, как в вашем примере, который, как правило, очень плохая идея с точки зрения качества и производительности.

EDIT: См код ниже:

ArrayList<int> ret = new ArrayList<int>(Arrays.asList(myInts)); 
ret.remove(index); 
return ret.toArray(); 
+0

Правый трек, показать, как использовать ArrayList для решения проблемы. –

+0

Я знаю, как это сделать с помощью arraylist, мне нужно использовать обычный массив, потому что это то, что просят сделать. – user3439273

+0

@ user3439273 домашнее задание? – Migol

2

Итак, первый тест на единицу:

package com.example; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.InjectMocks; 
import org.mockito.runners.MockitoJUnitRunner; 

import java.util.Arrays; 

import static org.junit.Assert.assertTrue; 

@RunWith(MockitoJUnitRunner.class) 
public class ArrayExample_UT { 

    @InjectMocks 
    private ArrayExample subject; 

    int[] testArray = {1, 2, 3, 4, 5}; 
    int[] expectedArray = {1, 2, 4, 5}; 

    @Test 
    public void testThat_RemoveEntry_RemovesCorrectEntry() throws Exception { 
     assertTrue(Arrays.equals(expectedArray, subject.removeEntry(2, testArray))); 
    } 
} 

Тогда, некоторый код, который работает зеленый:

package com.example; 

class ArrayExample { 

    public int[] removeEntry(int skipIndex, int[] sourceArray){ 
     int[] newArray = new int[sourceArray.length - 1]; 
     int targetIndex = 0; 
     for(int i = 0; i < sourceArray.length; i++){ 
      if(i != skipIndex){ 
       newArray[targetIndex++] = sourceArray[i]; 
      } 
     } 
     return newArray; 
    } 
} 
+0

Спасибо вам всю вашу помощь и за то, что вы остаетесь, чтобы помочь это долго, но я получил ответ от кого-то еще, прежде чем я увидел ваше сообщение извините – user3439273

+0

Не беспокойтесь ..... –

+1

+1 за то, что вы дали ответ, что качество продукции, включая блок контрольная работа! – fvu

Смежные вопросы