api 大法:
先通过 Set 去重,再通过 Arrays 升序
需要注意的地方就是如何动态地以下一个接受的值作为下一个循环的终点,这里使用的思路是用两个 while,一个记录控制台是否有继续输入,一个以“下一个数字”作为终点,内置一个计数器变量 cnt 记录每次读取的量,最后用 cnt 是否超过终点变量来判断每一轮是否接收结束。

import java.util.*;

public class Main {
    public static int[] func(int[] arr) {
        // 去重
        Set<Integer> set = new HashSet<>();
        for (int i : arr) {
            set.add(i);
        }
        // 列表
        List<Integer> list = new ArrayList<>();
        for (int item : set) {
            list.add(item);
        }
        // 数组
        int[] res = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            res[i] = list.get(i);
        }
        // 排序
        Arrays.sort(res);
        return res;
    }

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()) {
            // 长度
            int len = scanner.nextInt();
            int cnt = 0;
            while (cnt < len) {
               // 数组
                int[] arr = new int[len];                
                for (int i = 0; i < len; i++) {
                    // 元素
                    arr[i] = scanner.nextInt();
                    // 计数器
                    cnt++;
                }
                // 去重排序
                int[] res = func(arr);
                // 打印
                for (int item : res) {
                    System.out.println(item);
                }                 
            }                        
        }
    }
}