2013-07-31 2 views
0

В приведенном ниже методе я пытаюсь удалить значения в массиве, которые меньше 0 и больше 9. Я занимаюсь исследованиями, и я обнаружил, что использование Arraylist.remove(), вероятно, будет лучшим способом, но я не знаком с этим пока. Итак, я попытался скопировать весь массив в массив «мусор» и поставить только значения, которые меньше 0 и больше 9. Но мой вывод по-прежнему выходит 123145123145-110?Как удалить нежелательные элементы в массиве?

public static void test(){ 
int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10}; 

    int[] garbage = new int[input.length]; 
    for (int i=0; i<input.length; i++){ 
     if (input[i] < 0 && input[i] > 9){ 
      garbage[i] = input[i]; 
     } 
     int x = input[i]; 
     System.out.print(x); 
    } 

// EDIT

public static void votes(){ 
    int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10,20}; 
     int count = 0; 
     int[] garbage = new int[input.length]; 
     for (int i=0; i<input.length; i++){ 
      if (input[i]<0){ 
       garbage[count] = input[i]; 
       i++; 
       count++; 
      } 
     int x = input[i]; 
     System.out.print(x); 

     } 

    } 
+0

Мне удалось удалить что-либо меньшее, чем 0, сделав это: public static void votes() { int [] input = {1,2,3,1,4,5,1,2,3,1,4 , 5, -1,10,20}; \t \t \t int count = 0; \t \t \t int [] garbage = новый int [вход.длина]; \t \t \t для (INT I = 0; г 9), я получаю ArrayIndexOutOfBoundsException errror – huehuegg

+1

Ты просто копируя материал из 'input' в' garbage' - почему вы ожидаете изменения 'input'? также, пожалуйста, не публикуйте код в комментариях - это не читаемо - пожалуйста, отредактируйте/обновите свои вопросы с помощью любой дополнительной информации. – alfasin

+2

Вы действительно думаете, что целое число может быть как менее 0, так и более 9 одновременно? –

ответ

0

Вы используете неправильный интервал.

if (input[i] < 0 && input[i] > 9) 

должен быть этот

if (input[i] < 0 || input[i] > 9) 

Ваш мусор должен быть пустым, но ваш syso.println просто показывает все элементы входного массива в любом случае. Другая проблема заключается в том, что у вас будут элементы 0 < = input [i] < = 9 в вашем массиве мусора и много нулей между ними, если вы используете один и тот же индекс для обоих массивов. В целом код должен выглядеть следующим образом

int[] garbage = new int[input.length]; 
int j = 0; 
for (int i=0; i < input.length; i++){ 
    if (input[i] >= 0 && input[i] <= 9){ 
     garbage[j] = input[i]; 
     j++; 
     System.out.print(garbage[j]); 
    } 

}

Таким образом, вы увидите элемент добавляется в мусор. И все нули находятся в конце массива.

+0

Спасибо, что сделал это для меня. :) – huehuegg

0

Ваш выход выводит значения в массиве, независимо от его стоимости, как это находится за пределами, если оператор, попытайтесь переместить закрытие } для вашего если заявление после того, как заявление для печати, например, так

for (int i=0; i<input.length; i++){ 
    if (input[i] < 0 && input[i] > 9){ 
     garbage[i] = input[i]; 
    //} <--- move this to 
     int x = input[i]; 
     System.out.print(x); 
    } // <--- here 
} 

Однако значения внутри вашего массива garbage - это те, которые вам не нужны (меньше 0 и более 10), если вы распечатали их, вы найдете ожидаемый результат.

Если вы хотите массив со значениями, которые вы хотите затем сделать массив и добавить, что путь

int[] keeping = new int[input.length]; 
int j = 0; 
for (int i=0; i<input.length; i++){ 
    if (input[i] > 0 && input[i] <= 9){ 
     keeping[j] = input[i]; 
     j++; 
     int x = input[i]; 
     System.out.print(x); 
    } 
} 
0

Go назад так, когда и удалить что-то у обыкновение посещать индекс

для (INT I = sizeOfArray - 1, i> = 0; i--) { if array [i]> 0 удалить объект; }

жаль код SUDO

0

Ok, так как в комментариях вы сказали, что вы действительно хотите сделать это распечатать элементы> 0 и < 9, на самом деле не изменить массив, это стало довольно просто.

public static void votes(){ 
    int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10,20}; 
    for (int i=0; i<input.length; i++){ 
     if (input[i] >= 0 && input[i] <= 9){ 
      System.out.print(input[i]); 
     } 
    } 
} 

И вот оно!

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