我正在尝试输出最高数字出现在用户输入中的次数,例如用户输入2 4 3 4 2 4 0最高数字是4,它出现3次,不知道如何去做。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner keyboard = new Scanner(System.in);
String number, last;
System.out.println("Enter an interger (0 ends the input): ");
number = keyboard.nextLine();
last = number.substring(number.length() - 1);
while(!last.equals("0")){
System.out.println("Must end the input with a 0: ");
number = keyboard.nextLine();
last = number.substring(number.length() - 1);
}
String[] array = number.split(" ");
int max = Integer.MIN_VALUE, maxIndex = 0;
int count;
for (int i = 0; i < array.length; i++) {
if (Integer.parseInt(array[i]) > max) {
max = Integer.parseInt(array[i]);
maxIndex = i;
}
}
//String repeat = number.);
System.out.println("The largest number is " + max);
}
答案 0 :(得分:2)
您可以使用Java 8的流来实现,例如:
String number = "2 4 3 4 2 4 0";
String[] array = number.split(" ");
TreeMap<Integer,Long> numberMap = Arrays.stream(array)
.map(s -> Integer.parseInt(s))
.collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting()));
System.out.println(numberMap.descendingMap().firstEntry().getValue());
这基本上将每个号码及其计数存储到Map
。由于我们使用的Map
是TreeMap
,它会按升序对键进行排序。然后我们从中获取最后一个(即最高)键并打印相应的值3。
答案 1 :(得分:1)
其他答案效率较低,因此我会显示suggested solution by David Wallace的代码:
嗯,基本逻辑很简单。对于字符串中的每个数字,有三种可能性。
- 它大于以前最大的数字 - 因此将其存储为最大数字,并将计数重置为1.
- 它等于之前最大的数字 - 所以递增计数。
- 它低于之前最大的数字 - 所以请忽略它。
醇>您现在需要做的就是将其转换为Java。
所以这是:
int[] input = { 2, 4, 3, 4, 2, 4 };
int count = 0, max = 0;
for (int value : input) {
if (count == 0 || value > max) {
max = value;
count = 1;
} else if (value == max) {
count++;
}
}
System.out.printf("Highest number of %d was found %d times%n", max, count);
输出
Highest number of 4 was found 3 times
如果你想在很多地方做这件事,你可以编写自己的收藏家并使用Java 8 Streams。
以下是收藏家的使用:
int[] input = { 2, 4, 3, 4, 2, 4 };
Max max = Arrays.stream(input).collect(Max::new, Max::add, Max::merge);
System.out.printf("Highest number of %d was found %d times%n", max.getValue(), max.getCount());
这是收藏家本身:
public class Max {
private int value;
private int count;
public void add(int newValue) {
if (this.count == 0 || newValue > this.value) {
this.value = newValue;
this.count = 1;
} else if (newValue == this.value) {
this.count++;
}
}
public void merge(Max other) {
if (this.count == 0 || (other.count != 0 && other.value > this.value)) {
this.value = other.value;
this.count = other.count;
} else if (other.value == this.value) {
this.count += other.count;
}
}
public int getValue() {
return this.value;
}
public int getCount() {
return this.count;
}
}