Unten ist der Code, den ich implementiert habe. Meine Zweifel hier ist: Wenn ich versuche, die ersten größten und zweiten größten Werte in der Zeichenfolge zu drucken, ist die Ausgabe, die ich bekomme, in der Reihenfolge [second biggest, first biggest]
. Hier ist die Ausgabe von dem, was ich habe für den folgenden Code:Um das erste größte und zweitgrößte Element in einer Zeichenfolge zu drucken
The output of the map is: real--6
The output of the map is: to--2
The output of the map is: world--1
The output of the map is: hello--0
The list after insertion is: [to, real]
The list inserted as [biggest,secondBiggest] after calling main is: [to, real]
......
aber ich The list after insertion to be: [real, to]
wollen.
public class ReadString {
static String input = "This is a real project with real code to do real things to solve real problems in real world real";
public static void main(String[] args) {
List<String> lst = ReadString.RepeatedString("This is a real project with real "
+ "code to do real things to solve real " + "problems in real world real");
System.out.println("The list inserted as [biggest,secondBiggest] after calling main is: " + lst);
}
public static List<String> RepeatedString(String s) {
String[] s2 = input.split(" ");
String[] key = { "real", "to", "world", "hello" };
int count = 0;
Integer biggest = 0;
Integer secondBiggest = 1;
Map<String, Integer> map = new HashMap<String, Integer>();
for (int j = 0; j < key.length; j++) {
count = 0;
for (int i = 0; i < s2.length; i++) {
if (s2[i].equals(key[j])) {
count++;
}
}
map.put(key[j], count);
System.out.println("The output of the map is: " +key[j] + "--" + count);
}
/*
* To find the top two most repeated values.
*/
List<Integer> values = new ArrayList<Integer>(map.values());
Collections.sort(values);
for (int n : map.values()) {
if (biggest < n) {
secondBiggest = biggest;
biggest = n;
} else if (secondBiggest < n)
secondBiggest = n;
}
/* To get the top most repeated strings. */
List<String> list = new ArrayList<String>();
for (String s1 : map.keySet()) {
if (map.get(s1).equals(biggest))
list.add(s1);
else if (map.get(s1).equals(secondBiggest))
list.add(s1);
}
System.out.println("The list after insertion is: " +list);
return list;
}
}
Ich war gerade dabei, diese Lösung zu posten. Aber sollte es nicht "list.add (0, s1)" sein? stattdessen? Wenn Sie es bei Index 1 einfügen, wird es nach der zweitenBiggest-Zeichenfolge immer noch eingefügt, wenn es zuerst gefunden wurde. – endorphins
Danke für die Korrektur. –
Es hat funktioniert. Ich danke dir sehr.. :) – user6348718