如何打印数组中最大的两个整数的所有出现次数?
How do I print all the occurrences of the greatest two integers in an array?
我正在尝试打印整数数组中两个最高整数的出现次数,但输出结果始终是前三个。
Integer[] scores = {4,4,4,6,6,4,2,3};
Arrays.sort(scores, Collections.reverseOrder());
int flag = 0;
System.out.println(scores[0]);
int first = scores[0];
for (int i = 1; i < scores.length; i++) {;
if(first == scores[i]) {
System.out.println(scores[i]);
}else {
first = scores[i];
flag++;
System.out.println(scores[i]);
}
if(flag == 2) {
break;
}
}
是否有更好的打印方式?它们目前打印为 6 6 4 4 4 4 3。
正确的输出应该是 6 6 4 4 4 4
问题是 System.out.println(scores[i])
在您将标志递增为 2 之后。当这是列表中的第三个数字时,您不应该打印。
我changed/simplified代码为
int flag = 0;
int first = scores[0];
for (int i = 0; i < scores.length; i++) {
if(first != scores[i]) { //Encountering second number
first = scores[i];
flag++;
}
if(flag == 2) { //If already seen three numbers, break
break;
}
System.out.println(scores[i]); //Good to print it
}
将first
重命名为number
或其他名称更直观,因为它可以容纳第一个或第二个数字。
整数[] 分数 = {4,4,4,6,6,4,2,3};
Arrays.sort(分数, Collections.reverseOrder());
int flag = 0;
System.out.println(scores[0]);
int first = scores[0];
for (int i = 1; i < scores.length; i++) {;
if(first == scores[i]) {
System.out.println(scores[i]);
}else if(first != scores[i] && flag == 0) {//you need to change this
first = scores[i];
flag++;
System.out.println(scores[i]);
}else{ // if you dont want to traverse list after getting desired output
break;
}
}
我更喜欢 int[]
而不是 Integer[]
,并向后迭代排序的数组。您实际上不需要 else
这里,只需检查您是否不在数组的末尾 - 如果您不检查当前分数是否与下一个分数不同(因为我们正在向后迭代).您只需要在满足该条件时测试 flag
(并在第二次更改后测试 break
)。喜欢,
int[] scores = { 4, 4, 4, 6, 6, 4, 2, 3 };
Arrays.sort(scores);
for (int i = scores.length - 1, flag = 0; i >= 0; i--) {
if (i != scores.length - 1 && scores[i] != scores[i + 1]) {
flag++;
if (flag >= 2) {
break;
}
}
System.out.println(scores[i]);
}
我正在尝试打印整数数组中两个最高整数的出现次数,但输出结果始终是前三个。
Integer[] scores = {4,4,4,6,6,4,2,3};
Arrays.sort(scores, Collections.reverseOrder());
int flag = 0;
System.out.println(scores[0]);
int first = scores[0];
for (int i = 1; i < scores.length; i++) {;
if(first == scores[i]) {
System.out.println(scores[i]);
}else {
first = scores[i];
flag++;
System.out.println(scores[i]);
}
if(flag == 2) {
break;
}
}
是否有更好的打印方式?它们目前打印为 6 6 4 4 4 4 3。 正确的输出应该是 6 6 4 4 4 4
问题是 System.out.println(scores[i])
在您将标志递增为 2 之后。当这是列表中的第三个数字时,您不应该打印。
我changed/simplified代码为
int flag = 0;
int first = scores[0];
for (int i = 0; i < scores.length; i++) {
if(first != scores[i]) { //Encountering second number
first = scores[i];
flag++;
}
if(flag == 2) { //If already seen three numbers, break
break;
}
System.out.println(scores[i]); //Good to print it
}
将first
重命名为number
或其他名称更直观,因为它可以容纳第一个或第二个数字。
整数[] 分数 = {4,4,4,6,6,4,2,3}; Arrays.sort(分数, Collections.reverseOrder());
int flag = 0;
System.out.println(scores[0]);
int first = scores[0];
for (int i = 1; i < scores.length; i++) {;
if(first == scores[i]) {
System.out.println(scores[i]);
}else if(first != scores[i] && flag == 0) {//you need to change this
first = scores[i];
flag++;
System.out.println(scores[i]);
}else{ // if you dont want to traverse list after getting desired output
break;
}
}
我更喜欢 int[]
而不是 Integer[]
,并向后迭代排序的数组。您实际上不需要 else
这里,只需检查您是否不在数组的末尾 - 如果您不检查当前分数是否与下一个分数不同(因为我们正在向后迭代).您只需要在满足该条件时测试 flag
(并在第二次更改后测试 break
)。喜欢,
int[] scores = { 4, 4, 4, 6, 6, 4, 2, 3 };
Arrays.sort(scores);
for (int i = scores.length - 1, flag = 0; i >= 0; i--) {
if (i != scores.length - 1 && scores[i] != scores[i + 1]) {
flag++;
if (flag >= 2) {
break;
}
}
System.out.println(scores[i]);
}