我是java的新手。我想我的代码从用户获取max = 100整数的数组,然后它应该确定是否有任何重复的整数。如果有重复,则应该打印NO,如果所有整数都是唯一的则应该是YES。它应该将输入从最低到最高排序,然后在排序后打印索引号及其对应的整数。我也可以按顺序获得最终的排序输出。这就是我到目前为止所拥有的。关于如何做得更好的任何想法?
public static void main(String args[]){
Scanner takeIn = new Scanner(System.in);
System.out.println("Enter the numbers separated by comma's");
String startRay = takeIn.next();
String[] allParts = startRay.split(",");
int L = allParts.length;
int[] intAllParts = new int[allParts.length];
Arrays.sort(allParts);
for(int n=0; n<L; n++){
intAllParts[n] = Integer.parseInt(allParts[n]);
System.out.println(" Index of " + n + " Value of " + allParts[n]);
}
for(int n=1; n<L; n++){
intAllParts[n] = Integer.parseInt(allParts[n]);
if(intAllParts[n-1]==intAllParts[n]){
System.out.println(" First duplicate found at index " + (n));
System.out.println(" NO");
System.out.println(Arrays.toString(allParts) + " Array Values");
return;
}
}
Arrays.sort(allParts);
System.out.println(Arrays.toString(intAllParts) + " Array Values");
System.out.println(" YES");
takeIn.close();
}
}
输出
Enter the numbers separated by comma's
9,6,4,3,22,12,7,8,44,33,21,19,26,48,55,61,15,14,2,61,27,76,79,84,93
Index of 0 Value of 12
Index of 1 Value of 14
Index of 2 Value of 15
Index of 3 Value of 19
Index of 4 Value of 2
Index of 5 Value of 21
Index of 6 Value of 22
Index of 7 Value of 26
Index of 8 Value of 27
Index of 9 Value of 3
Index of 10 Value of 33
Index of 11 Value of 4
Index of 12 Value of 44
Index of 13 Value of 48
Index of 14 Value of 55
Index of 15 Value of 6
Index of 16 Value of 61
Index of 17 Value of 61
Index of 18 Value of 7
Index of 19 Value of 76
Index of 20 Value of 79
Index of 21 Value of 8
Index of 22 Value of 84
Index of 23 Value of 9
Index of 24 Value of 93
First duplicate found at index 17
NO
[12, 14, 15, 19, 2, 21, 22, 26, 27, 3, 33, 4, 44, 48, 55, 6, 61, 61, 7, 76, 79, 8, 84, 9, 93] Array Values
答案 0 :(得分:1)
只需使用TreeSet
:
public static void main(String[] args) throws Exception {
final String in = "9,6,4,3,22,12,7,8,44,33,21,19,26,48,55,61,15,14,2,61,27,76,79,84,93";
final SortedSet<Integer> inputs = new TreeSet<>();
boolean dup = false;
for (final String s : in.split(",")) {
if (!inputs.add(Integer.parseInt(s))) {
dup = true;
}
}
if (dup) {
System.out.println("There were duplicates");
} else {
System.out.println("There were no duplicates");
}
System.out.println("The highest number is " + inputs.last());
System.out.println("The lowest number is " + inputs.first());
final Iterator<Integer> iter = inputs.iterator();
for (int i = 0; iter.hasNext(); ++i) {
System.out.println(i + " -> " + iter.next());
}
}
Set
保证唯一商品,如果商品已在add
中,则false
将返回Set
。
SortedSet
保证Set
中的所有项目始终排序,TreeSet
是SortedSet
的实现。
首先循环输入String
并按,
拆分,然后将项目添加到Set
并检查返回值。然后我们打印出我们是否发现重复。
然后使用last
和first
方法获取最大和最小的元素。
最后,使用Set
循环遍历Iterator
,按顺序吐出元素及其索引。请注意,Set
没有索引元素,所以这些是&#34;伪&#34;指数。
答案 1 :(得分:0)
像这样:
public static void main(String args[]){
Scanner takeIn = new Scanner(System.in);
System.out.println("Enter the numbers separated by comma's");
String startRay = takeIn.next();
String[] allParts = startRay.split(",");
int L = allParts.length;
int[] intAllParts = new int[allParts.length];
//Arrays.sort(allParts); //no use! doesn't sort numbers, it sorts strings.
for(int n=0; n<L; n++){
intAllParts[n] = Integer.parseInt(allParts[n]);
//System.out.println(" Index of " + n + " Value of " + allParts[n]);
//array will be sorted, so no use printing now
}
Arrays.sort(intAllParts); //sorts the numbers correctly.
for(int n=0; n<L; n++){
//intAllParts[n] = Integer.parseInt(allParts[n]); //why do this again?
//print now, must be intAllParts, not allParts
System.out.println(" Index of " + n + " Value of " + intAllParts[n]);
if(n>0 && intAllParts[n-1]==intAllParts[n]){
System.out.println(" First duplicate found at index " + (n));
System.out.println(" NO");
System.out.println(Arrays.toString(intAllParts) + " Array Values");
return;
}
}
//Arrays.sort(allParts); //no use
System.out.println(Arrays.toString(intAllParts) + " Array Values");
System.out.println(" YES");
takeIn.close();
}
}