下面的代码检查以确保命令行参数是整数?但是,我需要它只打印一次命令行中的每个整数,无论整数出现在命令行中的次数。我怎么做?
public class Unique {
public static void main(String[] args) {
for (int i = 0; i<args.length; i++) {
try {
int j = Integer.parseInt(args[i]);
System.out.println(j);
}
catch (NumberFormatException e) {
System.out.println("Your command line argument "+ args[i] +" is a non-integer!");
}
}
}
}
答案 0 :(得分:0)
你需要的是一套。集合不包含重复项,因为它是以数学方式定义的。 Java有一个Set
类来完成这项工作。
Set<Integer> set = new HashSet<Integer>();
for (int i = 0; i < args.length; i++)
{
try
{
int j = Integer.parseInt(args[i]);
set.add(j);
}
catch (NumberFormatException e)
{
System.out.println("Your command line argument "+ args[i] +" is a non-integer!");
}
}
System.out.println(set);
或迭代所有这些元素:
for (Integer i : set)
{
System.out.println(i);
}
答案 1 :(得分:0)
public class Unique {
public static void main(String[] args) {
final Set<Integer> uniqueIntegers = new HashSet<>();
for (int i = 0; i<args.length; i++) {
try {
int j = Integer.parseInt(args[i]);
uniqueIntegers.add(j);
}
catch (NumberFormatException e) {
System.out.println("Your command line argument "+ args[i] +" is a non-integer!");
}
}
System.out.println(uniqueIntegers);
}
答案 2 :(得分:0)
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