如何在Java中使用递归从数组中删除

如何在Java中使用递归从数组中删除,java,arrays,recursion,Java,Arrays,Recursion,如何在Java中使用递归从数组中删除 数组可以是任意长度和任意整数 不能使用循环(while、for等) 比如说 [2][4][2][0][9] 应打印(2409) 感谢您的帮助在Java中,您无法从数组中删除元素。不使用递归,也不使用循环。我在这里假设您实际上不想删除元素[正如@aioobe所提到的,它无法完成],但您实际上想要:“打印数组中的所有元素,不重复”。[我从示例中假设,您提到要打印指定的输出] 方法是维护一个包含您已经遇到的所有元素的列表,并且仅当您遇到一个元素并且该元素不在集合

如何在Java中使用递归从数组中删除

数组可以是任意长度和任意整数

不能使用循环(while、for等)

比如说

[2][4][2][0][9]
应打印(2409)


感谢您的帮助

在Java中,您无法从数组中删除元素。不使用递归,也不使用循环。

我在这里假设您实际上不想删除元素[正如@aioobe所提到的,它无法完成],但您实际上想要:“打印数组中的所有元素,不重复”。[我从示例中假设,您提到要打印指定的输出]

方法是维护一个包含您已经遇到的所有元素的列表,并且仅当您遇到一个元素并且该元素不在集合中时才打印该元素

递归部分可能是:始终处理i元素(
arr[i]
),并在
i==arr.length
。不要忘记在每次递归调用中增加i

应该是这样的:

public static void printNoDupes(int[] arr,int i,Set<Integer> seen) {
    if (i == arr.length) return;
    if (!seen.contains(arr[i])) {
        System.out.print(arr[i] + " ");
        seen.add(arr[i]);
    }
    printNoDupes(arr,i+1,seen);
}
public static void printNoDupes(int[] arr) { 
    printNoDupes(arr,0,new HashSet<Integer>());
    System.out.println();
}
公共静态无效打印节点(int[]arr,int i,Set seen){
如果(i==arr.length)返回;
如果(!seen.contains(arr[i])){
系统输出打印(arr[i]+“”);
见。添加(arr[i]);
}
打印节点(arr,i+1,见);
}
公共静态无效打印节点(int[]arr){
printNodeUpes(arr,0,new HashSet());
System.out.println();
}

对数组进行排序,然后使用递归删除元素(如果该元素与以前找到的元素相同,则该元素/参数指示以前唯一的元素)


正如其他人所说,您不能从原始数组中删除元素,您需要将应该保留的元素复制到新数组中。

到目前为止您尝试了什么?(这看起来像家庭作业。如果是,请将其标记为家庭作业。)应删除哪些元素?随机的?你必须更加明确。什么是要删除的?复制品?请改进这个问题。如果允许使用
Set
,您只需要`System.out.println(新的HashSet(Arrays.asList(新的整数[]{2,4,2,0,9})).toString()`@宏:对,但OP特别要求递归解决方案。“…您需要将应保留的元素复制到新数组”-但是这个数组的维数是多少?您可以初始化新数组的大小与原始数组的大小相同,并使用一些特殊的元素来指示其结束,或者您可以在函数的第一次调用中计算唯一的元素,然后分配一个具有该大小的新数组,然后在第二次调用中将唯一的元素存储到新数组中。