任务是:按照元素在原始数组中首次出现的顺序创建一个包含唯一元素的数组

问题描述 投票:0回答:1

我不明白我做错了什么。我是编程新手。

任务是:创建第二个数组,其中每个数字仅包含一次。但是,顺序应与原始数组中第一次出现的顺序相对应。解数组在主程序中输出。

我已经编写了这段代码:

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。

java arrays sorting
1个回答
0
投票

您正在做的是从相同的索引开始进行比较 - 这是第一个错误 - 然后将项目添加到哑数组(如果存在) - 这是第二个错误。

您可以使用 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.