2015-12-07 5 views
2

Я пытаюсь удалить элемент из массива, приняв массив, а также элемент, который нужно удалить. Но когда я печатаю массив, отображается элемент prev на удаляемый элемент. Как я могу это исправить?Я пытаюсь удалить элемент из массива

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class delete { 
    void main() throws Exception { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter the number of numbers"); 
     int n = Integer.parseInt(br.readLine()); 
     int x[] = new int[n]; 
     System.out.println("Enter the numbers"); 
     for (int i = 0; i < n; i++) { 
      x[i] = Integer.parseInt(br.readLine()); 
     } 
     System.out.println("Enter the number you want to delete"); 
     int d = Integer.parseInt(br.readLine()); 
     boolean b; 
     int i = 0; 
     for (; i < n; i++) { 
      if (x[i] == d) { 
       b = true; 
       break; 
      } 
     } 
     int q = i;//index position of the element to be deleted 

     int x2[] = new int[n - 1]; 
     for (int k = 0; k < n - 1; k++) { 
      if (q != k) 
       x2[k] = x[k]; 
      if (q == k) 
       x2[k] = x[k + 1]; 
     } 

     for (int j = 0; j < n - 1; j++) { 
      System.out.println(x2[j]); 
     } 
    } 
} 
+1

Посмотрите на цикл 'for (int k = 0; k Tom

+0

Предоставление вашим переменным понятных имен значительно упростило бы то, что вы пытаетесь сделать. – resueman

+0

@ Ты мог бы быть немного более ясным? как это исправить? – thenewbie

ответ

1

Проблематика фрагмент в OPS код:

for (int k = 0; k < n - 1; k++) { 
    if (q != k) 
     x2[k] = x[k]; 
    if (q == k) 
     x2[k] = x[k + 1]; 
} 

Как сказал в своем первом комментарии, это не в состоянии правильно написать каждое значение за q в новый массив.

Давайте предположим, что следующие переменные:

int n = 9; 
int q = 5; 
int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
int[] x2 = new int[n - 1]; 

После выполнения упомянутого цикла, x2 тогда будет [1, 2, 3, 4, 5, 7, 7, 8], потому что в if (q == k) OP записывает значение следующего индекса, если он достигнет игнорировали индекс и на следующая итерация снова записывает этот же показатель с if (q != k) x2[k] = x[k];. Вот почему «7» происходит дважды.

простой способ исправить это с помощью двух отделяет петли, как OP сделал после моего предложения:

for (int k = 0; k < q; k++) { 
    x2[k] = x[k]; 
} 
for (int k = q; k < n - 1; k++) { 
    x2[k] = x[k+1]; 
} 

Первый цикл записывает каждое значение перед игнорировали индекса и второй цикл записывает каждое значение позади игнорируемый индекс.

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