public class UniqueNumbers {
public static void main(String[] args) {
args = new String[6];
args[0] = "5";
args[1] = "6";
args[2] = "2";
args[3] = "5";
args[4] = "1";
args[5] = "1";
Arrays.sort(args);
// Sort the array. This will use natural order:
// low -> high for integers, a -> z and low to high for strings
// Essentially this causes our array to sort from low to high, despite not being integers
for (int i = 0; i < args.length; i++) { // Loop over the entire array
if (i == 0) { // (1)
System.out.println(args[0]);
} else if (!(args[i - 1].equals(args[i]))) { // (2)
System.out.println(args[i]);
}
}
}
}
输出:
1
2
5
6
澄清:
为了便于演示,我手动将值放入数组中。这没什么区别,你可以继续使用你的输入法。
(1):先读(2)
。由于下面的方法,我们基本上会跳过第一个元素。第二部分的else if
本质意思是if i > 0
。如果我们不这样做,我们会ArrayIndexOutOfBoundsException
在我们这样做时得到一个,args[i - 1]
因为那会尝试访问args[-1]
. 这就是我们跳过第一个元素的原因:以避免这种情况。但是,这也意味着我们的第一个值 ( 1
) 将被忽略。这就是为什么我们只想确保始终打印第一个值。
(2):现在我们检查当前元素 ( args[i]
) 是否等于 ( .equals()
) 与前一个元素 ( args[i -1]
)。如果不是这种情况(!
反转语句),我们打印当前值。
使用这种方法,除了标准的数据结构之外,您可以在没有任何数据结构的情况下解决您的任务。
更多可视化:
开始:
5 6 2 5 1 1
种类:
1 1 2 5 5 6
环形:
!
1 1 2 5 5 6 -> Output: 1
!
1 1 2 5 5 6 -> Not different from previous one, no output
!
1 1 2 5 5 6 -> Different from previous one, output: 1 2
!
1 1 2 5 5 6 -> Different from previous one, output 1 2 5
!
1 1 2 5 5 6 -> Not different from previous one, no output
!
1 1 2 5 5 6 -> Different from previous one, output 1 2 5 6