2016-01-18 3 views
1

У меня есть ArrayList, который содержит 10 элементов и переменную int = 12. Теперь я хочу подсчитать, сколько элементов находится в array, и если они меньше 12, чтобы начать отсчет снова с 0 и остановиться до индекса 2 и удалить его, пока у меня не будет одного элемента в моем массиве. Я попытался следующие:Извлечение элемента из ArrayList

int j = 12; 
int l = 0; 

// Here I check if j is less than array.size 
while (j < array.size()) { 
    for (int i = 0; i < array.size(); i++) { 
     if (j == i + 1) { 
      array.remove(i); 
     } 
    } 
} 
// Here is for j greater than array.size 
while (array.size() != 1) { 
    for (int i = 0; i < array.size(); i++) { 
     l = j - array.size(); 
     if (l < array.size()) { 
      array.remove(l); 
     } 
    } 
} 
System.out.println(array); 

UPDATE:

MyArray = {1,2,3,4,5,6,7,8,9,10}; 
int=12; 

содержат только 10 элементы, но я хочу, чтобы удалить индекс с номером 12, пока индекс 12 не существует, я должен начните отсчет снова с нуля, а число 12 находится в индексе 2, поэтому я должен удалить индекс с номером 2. Вторая итерация будет содержать только 9 элементы, и снова 12-9=3, я должен удалить индекс с номером 3, пока не будет иметь только один элемент в

+0

Если вы всегда удалить элемент с индексом 2, вам все равно придется 2 элемента слева (индекс 0 и 1) –

+3

не могли бы вы прояснить, чего вы пытаетесь достичь, пожалуйста? Я не в состоянии понять, что вы пытаетесь сделать! – ParkerHalo

+1

Не могли бы вы дать нам немного понимания, почему это делается таким образом, если вы хотите иметь только элемент с индексом 1? Это выглядит действительно запутанным. – SomeJavaGuy

ответ

0

Ответ на обновленный вопрос:

Если у вас есть список длиной 10 и вы хотите удалить «12-й элемент» вы можете использовать оператор по модулю:

ArrayList<...> someList = ...; 
int toDelete = 12; 

int deleteInRange = toDelete % someList.size(); 
someList.remove(deleteInRange); 

Оператор по модулю будет доставлять остальную часть integerdivision 12/10 (toDelete % someList.size())

Вы можете использовать этот фрагмент кода в цикле, чтобы удалить несколько элементов.

+0

Спасибо, что он работает !!!! –

1

Вместо зацикливание дважды через массив, чтобы удалить последний п элементы до длина списка равна J, вы могли бы просто использовать:

while (j < array.size()) { 
    array.remove(j - 1); 
} 

Если вы всегда хотите, чтобы удалить индекс 2, вы можете сделать:

while (array.size() >= 3) { // otherwise you will get a ArrayIndexOutOfBoundsException 
    array.remove(2); 
} 

Однако у вас будет два элемента, оставшихся в вашем ArrayList вместо 1 (с индексом 0 и 1). Вы не можете удалить «ndex 2» в этой точке, потому что это не действительный индекс больше.

Таким образом, можно либо удалить индекс 0/1 впоследствии или то, что я думаю, что вы хотите достичь:

while (array.size() >= 2) { // otherwise you will get a ArrayIndexOutOfBoundsException 
    array.remove(1); 
} 

Тогда только один элемент останется в списке с индексом 0.

Edit: для обновления вашего вопроса это

int originalSize = array.size(); 
while (array.size() >= originalSize - j) { // otherwise you will get a ArrayIndexOutOfBoundsException 
    array.remove(originalSize - j); 
} 

Однако, вы всегда будете оставаться с size - j элементов в списке. Вы не можете удалить индекс 3, например, пока в списке не останется только один элемент.

+0

Спасибо за вашу помощь и настойчивость. Я голосовал за ваш вопрос, но не то, что хочу. Еще раз спасибо –

-1

Если вы всегда хотите, чтобы удалить индекс 2, вы могли бы сделать:

l = j - array.size(); 

Измените эту строку, как показано ниже:

int sum = 0; 
sum = l - array.size(); 
if (sum > 0) { 
    array.remove(sum); 
} else { 
    sum = array.size() - l; 
    array.remove(sum); 
} 
Смежные вопросы