如何将数组中的特定数字右移(不使用临时数组或改变顺序)(java)[已关闭]

sycxhyv7  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(105)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
在这段代码中,我应该将数组中的所有重复值转换为-1,例如{1,3,3,3,3,2,6,4}转换为{1,3,4,6,4,-1,-1,-1}。我的代码不起作用,它可以将重复值转换为-1,但是它并没有把它们移到数组的右边。能请你帮忙吗。我想用java编程语言解决。下面是我的代码:

public static void main(String args[]) {
        int [] arr = {4,2,3,5,4,2,12,4,4,3,2,3,4,5,6,7,9,8};
        removeDuplicates(arr);
        for(int i =0;i<arr.length;i++){
            System.out.print(arr[i]+ " ");
        }
    }
    public static void removeDuplicates(int [] x){
        for(int i=0;i<x.length;i++){
            for(int j=i+1;j<x.length;j++){
                if(x[i]==x[j]){
                    x[j]=-1;
                }
            }
        }
    shift(x);
    }
    public static void shift(int[] x){
        int tmp;
        int count =0;
        for(int i=0;i<x.length;i++){
            if(x[i]==-1){
                tmp=x[i];
                x[i]=x[x.length-1-count];
                x[x.length-1-count]=tmp;
                count++;
            }
        }
    }
jq6vz3qz

jq6vz3qz1#

移位方法的问题

x[i]=x[x.length-1-count];

例如,这将使x.length-1-count循环到数组的开头
{1、1、2}
第一个方法将返回{1,-1,2},然后shift将使其返回为{1,-1,2}。此外,使用IDE的调试器将有助于使您了解它是如何工作的

public static void shift(int[] x) {
    int tmp;

    for (int i = 0; i < x.length; i++) {
        if (x[i] == -1) {
            for (int j = x.length - 1; j > i; j--) {
                if (x[j] != -1) {
                    tmp = x[j];
                    x[j] = x[i];
                    x[i] = tmp;
                    break;
                }
            }
        }
    }
}

希望能有所帮助,祝你有美好的一天:)

相关问题