2014-12-10 3 views
0

В Java преподаватель научил нас, как удалить элемент из массива без использования массивов utils и т. Д. Поэтому я попробовал метод, который он дал нам. Он обновляет значение индекса точно так, как я хочу. после изменения значения индекса, я хочу, чтобы он удалял последний индекс «sizeOfArray-1» , но я не мог этого сделать! Любая помощь?Как удалить элемент из массива

Вот код:

import java.util.Scanner; 

public class Arrays { 

static int x[] = { 1, 2, 3, 4, 5, 6, 7 }; 

static Scanner input = new Scanner(System.in); 

public int search(int target) { 
    for (int index = 0; index < x.length; index++) { 
     if (x[index] == target) 
      return index; 
    } 
    return -1; 
} 

public void deleteIndex(int target) { 
    int deleted = search(target); 
    if (deleted == -1) 
     System.out.println("Entry Not Found!"); 
    else { 
     x[target] = x[7-1]; 
    } 
} 

public static void main(String[] args) { 
    Arrays f = new Arrays(); 
    int counteri = 0; 
    int counterj = 0; 

    for (int j = 0; j < x.length; j++) { 
     System.out.print(counterj + "=>" + x[j] + " \n"); 
     counterj++; 
    } 

    f.deleteIndex(input.nextInt()); 

    for (int i = 0; i < x.length; i++) { 
     System.out.print(counteri + "=>" + x[i] + " \n"); 
     counteri++; 
    } 
} 
} 
+0

Не рекомендуется создавать новые классы с тем же именем, что и существующие, т. Е. 'Arrays' уже существует. – bcsb1001

+2

Это очень просто: вы не можете изменить размер массива. – Tom

+0

Создайте новый массив с указанным размером и заполните его! –

ответ

1

Прежде всего, вы должны изменить t его линия

x[target] = x[7-1]; 

к этому:

x[deleted] = x[7-1]; 

, потому что вы нашли элемент в вашей функции поиска, и возвращает его индекс deleted так что вы должны сделать свои действия в x[deleted] не x[target]

Ваш код просто заменит фактическое значение элемента на количество последнего элемента здесь:

else { 
    x[target] = x[7-1]; 
} 

Итак, когда вы хотите (так называете его), удалите последний элемент, просто замените последний элемент на себя, чтобы он ничего не сделал.

Вы можете просто назначить другое значение, которое не существует в вашем массиве, например, -1, и вы можете видеть, что ваша функция работает так, как вы хотите.

вещь как это:

else { 
    x[deleted] = -1; 
} 

Но не удалить на самом деле, и вы не можете удалять элементы из массива в Java.

+0

Это именно то, что я имею в виду .. – Chance

+0

@Чанс, если это ваш ответ, не забудьте отметить его как ответ – Lrrr

+0

Большое спасибо @ Али Амири, ваш ответ был очень полезным .. Я добавил: int size = x .length; размер--; – Chance

1

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

  • создать новый массив, который имеет размер -1 исходного массива
  • запуска цикла, отслеживать текущий индекс
  • скопировать элемент (s) из исходного массива в новый массив, соответствующий текущему индексу, если он должен быть (в противном случае пропустить элемент, который должен быть удален)
  • возвратный новый массив
+0

Я добавлю к этому, поскольку искатель кажется новичком: используйте ['Arrays.copyOf()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Arrays .html # copyOf-INT: A-int-). – bcsb1001

0

Массив в Java имеет фиксированную предопределенную длину, как только вы инициализируете массив, вы не сможете удалить элемент из него. Лучшее, что вы можете сделать, это создать еще один массив, содержащий все элементы исходного массива без этого конкретного.

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