我试图通过接受数组以及要删除的元素来从数组中删除元素。但是当我打印数组时,正在显示要删除的元素的元素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]);
}
}
}
答案 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];
}
第一个循环在忽略的索引之前写入每个值,第二个循环在忽略的索引之后写入每个值。