我不明白我做错了什么。我是编程新手。
任务是:创建第二个数组,其中每个数字仅包含一次。但是,顺序应与原始数组中第一次出现的顺序相对应。解数组在主程序中输出。
我已经编写了这段代码:
public static int[] sortSecArr (int[] arr){
int dumpArr[] = new int[arr.length];
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length; j++){
if(arr[i] == arr[j]){
dumpArr[i] = arr[i] ;
}
}
}
return dumpArr;
}
我知道有些事情是错的,但不是我必须改变的。
我尝试将其分成两个 for 循环,然后将 arr[i] 与 arr[j] 进行比较,当它不同时,它应该进入 dumpArr。
您正在做的是从相同的索引开始进行比较 - 这是第一个错误 - 然后将项目添加到哑数组(如果存在) - 这是第二个错误。
您可以使用 HashSet 来帮助您确定唯一性,使用 List 来帮助您确定顺序并创建一个比所需大小更大的数组,然后将其转换为这样的数组:
public static int[] sortSecArr(int[] arr) {
Set<Integer> set = new HashSet<>();
List<Integer> uniqueList = new ArrayList<>();
for (int num : arr) {
if (!set.contains(num)) {
uniqueList.add(num);
set.add(num);
}
}
// Convert ArrayList to array
int[] uniqueArray = new int[uniqueList.size()];
for (int i = 0; i < uniqueList.size(); i++) {
uniqueArray[i] = uniqueList.get(i);
}
return uniqueArray;
}