Java 外for循环从某个位置开始 public void removeDups(){ int i,k,j,lastFound=0; 如果(该元素
前面的方法从调用它的对象(数组)中删除重复项,问题是我希望外部循环每次增量都从某个位置开始,我将该位置的值分配给变量lastFound,并将该变量放入循环的增量部分,但程序进入无限循环,并且从不停止,这有什么问题?您在每次迭代中都设置了Java 外for循环从某个位置开始 public void removeDups(){ int i,k,j,lastFound=0; 如果(该元素,java,for-loop,Java,For Loop,前面的方法从调用它的对象(数组)中删除重复项,问题是我希望外部循环每次增量都从某个位置开始,我将该位置的值分配给变量lastFound,并将该变量放入循环的增量部分,但程序进入无限循环,并且从不停止,这有什么问题?您在每次迭代中都设置了i=lastFound。在外循环开始时,将lastFound初始化为i+1。这样,如果不重置lastFound,它将正常递增 或者,去掉lastFound,当找到匹配项时,设置i=i-1,在i+1处启动k循环,而不是i,并将外部循环中的增量表达式从i=lastFo
i=lastFound
。在外循环开始时,将lastFound
初始化为i+1
。这样,如果不重置lastFound
,它将正常递增
或者,去掉lastFound
,当找到匹配项时,设置i=i-1
,在i+1
处启动k
循环,而不是i
,并将外部循环中的增量表达式从i=lastFound
更改为i++
。我还将使用系统简化您的代码。arraycopy
:
public void removeDups() {
int i, k, j, lastFound = 0;
if (this.nElements < 1) {
System.out.println("Empty Array");
} else {
for (i = 0; i < this.nElements; i = lastFound) //outer loop
{
for (j = i + 1; j < this.nElements; j++) {
if (this.arr[i] == this.arr[j]) {
lastFound = i;
for (k = i; k < this.nElements; k++) {
this.arr[k] = this.arr[k + 1];
}
this.nElements--;
break;
}
}
}
for (i = 0; i < this.nElements; i++) {
System.out.println(this.arr[i]);
}
}
}
public void removeDups(){
if(元素<1){
System.out.println(“空数组”);
}否则{
对于(int i=0;i
想想这个:在第一次迭代中
public void removeDups() {
if (nElements < 1) {
System.out.println("Empty Array");
} else {
for (int i = 0; i < nElements; i++) {
for (int j = i + 1; j < nElements; j++) {
if (arr[i] == arr[j]) {
System.arraycopy(arr, i + 1, arr, i, nElements - (i + 1));
nElements--;
i--;
break;
}
}
}
for (i = 0; i < nElements; i++) {
System.out.println(arr[i]);
}
}
}
现在如果这是假的:this.arr[i]==this.arr[j]
那么lastfound
永远不会更改(保持为0),这将导致无限循环
要解决此问题,请处理不匹配场景
i = 0