Java 外for循环从某个位置开始 public void removeDups(){ int i,k,j,lastFound=0; 如果(该元素

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

前面的方法从调用它的对象(数组)中删除重复项,问题是我希望外部循环每次增量都从某个位置开始,我将该位置的值分配给变量lastFound,并将该变量放入循环的增量部分,但程序进入无限循环,并且从不停止,这有什么问题?

您在每次迭代中都设置了
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