我试图从数组

时间:2015-12-07 20:32:15

标签: java arrays

我试图通过接受数组以及要删除的元素来从数组中删除元素。但是当我打印数组时,正在显示要删除的元素的元素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 个答案:

答案 0 :(得分: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];再次写出精确的相同索引。这就是为什么&#34; 7&#34;发生两次。

解决这个问题的一个简单方法就是使用两个分离循环,就像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];
}

第一个循环在忽略的索引之前写入每个值,第二个循环在忽略的索引之后写入每个值。