所以我创建了一个有一些副本的数组,我创建了一个算法,它会发现重复项并将值更改为0.在我将值更改为0后,它将找到0处的所有值并覆盖它们
for(out = 0;out < array.length - 1;out++)
for(in = out+1; in < index;in ++)
if(array[in] == array[out])
array[in] = 0;
for(int n = 0;n < array.length;n++)
if(array[n] == 0){
array[n] = array[n + 1];
n--;
然而它似乎没有运行,当我做一些调整以使其运行时,它不会覆盖元素并减少数组的大小,我做错了什么?
由于
答案 0 :(得分:2)
您需要大括号({
和}
)。如果没有它们,你只会执行下一行,但之后不会执行任何其他操作。
例如:
if(x == y)
y = 1;
System.out.println("Not inside if");
只有y = 1
会在x == y
返回true
的结果中执行。 System.out.println("Not inside if")
将始终执行,因为它位于if
条件语句之外。
如果您希望在x == y
时同时运行这两行,则可以执行以下操作:
if(x == y) {
y = 1;
System.out.println("Not inside if");
}
答案 1 :(得分:2)
你的算法应该是两遍。首先,将所有重复项标记为零
for(out = 0;out < array.length - 1;out++)
for(in = out+1; in < index;in ++)
if(array[in] == array[out])
array[in] = 0;
然后计算需要在标记位置放置的内容并覆盖它们。
for(int i = 0;i < array.length;i++)
if(array[i] == 0)
array[i] = newvalue(i);// array[i + 1];
答案 2 :(得分:0)
因此,您尝试从现有阵列中删除元素。你不能这样做。相反,您必须创建一个新数组,并仅使用您想要保留的元素填充它。
一种光滑的方法是使用ArrayList
。这样您就可以一次性删除重复项。
ArrayList<Integer> myList = new ArrayList<>(Arrays.asList(array));
for (int out = 0; out < array.length; out++) {
for (int in = out + 1; in < array.length; in++) {
if (array[in] == array[out]) {
myList.remove(in);
in--;
}
}
}
或者,更多的是原始的纯粹精神:
int newLength = array.length;
for(int out = 0; out < array.length; out++) {
for(int in = out + 1; in < array.length; in++) {
if (array[in] == array[out]) {
array[in] = 0;
newLength--;
}
}
}
int[] newArray = new int[newLength];
int i = 0;
for(int n = 0; n < array.length; n++) {
if (array[n] != 0) {
newArray[i] = array[n];
i++;
}
}