如何将Java去重后打印的数值转换为数组并输出?
解决数组去重后返回数组的问题
首先你的代码有个小问题:循环条件i < n - 1会漏掉数组的最后一个元素,得改成i < n才能处理所有元素。
要实现去重后返回数组,只需要把removeDuplicates方法的返回类型从void改成int[],然后把HashMap里的键转成int数组返回即可。下面是修改后的完整代码:
import java.util.HashMap; import java.util.Arrays; import java.util.Scanner; public class RemoveDuplicates { public static void main(String[] args) { int[] array = input(); System.out.println("Original Array: " + Arrays.toString(array)); int[] uniqueArray = removeDuplicates(array); System.out.println("Array after removing duplicates: " + Arrays.toString(uniqueArray)); } // 输入数组的方法 public static int[] input() { Scanner input = new Scanner(System.in); System.out.println("请输入数组元素个数: "); int size = input.nextInt(); int[] array = new int[size]; System.out.println("请输入" + size + "个元素: "); for (int i = 0;i < size; i++) { array[i] = input.nextInt(); } input.close(); // 记得关闭Scanner return array; } // 修改后的去重方法,返回去重后的int数组 public static int[] removeDuplicates(int[] array) { HashMap<Integer, Integer> map = new HashMap<>(); int n = array.length; // 修复循环条件,处理所有元素 for(int i = 0; i < n; i++) { if(map.containsKey(array[i])) { map.put(array[i], map.get(array[i]) + 1); } else { map.put(array[i], 1); } } // 将HashMap的键转换为int数组 return map.keySet().stream() .mapToInt(Integer::intValue) .toArray(); } }
关键修改点说明:
- 修复循环条件:把
i < n - 1改为i < n,确保数组最后一个元素也被处理。 - 修改方法返回类型:
removeDuplicates方法现在返回int[],而不是直接打印。 - 转换键为数组:利用Java Stream将HashMap的
keySet()(存储所有不重复元素)转换为int数组,也可以用手动遍历的方式:
// 手动遍历转数组的方式 Integer[] tempArray = map.keySet().toArray(new Integer[0]); int[] uniqueArray = new int[tempArray.length]; for (int i = 0; i < tempArray.length; i++) { uniqueArray[i] = tempArray[i]; } return uniqueArray;
- main方法接收并打印:接收去重后的数组,用
Arrays.toString()直接打印数组内容。
内容的提问来源于stack exchange,提问作者ggplot2
相关产品推荐
相关产品推荐

