Guten Tag liebes Java Team. Wie kann ich die Länge eines Arrays prüfen, bzw mir nur das Längste Element anzeigen lassen?
Habe hier eine Datei mit Namen angelegt und möchte nun, dass die Namen in der Datei nach Größe kontrolliert werden und nur der Längste Namen ausgegeben wird.
In diesem Fall wäre es "Dagobert". Ich habe eine txt. Datei angelegt und diese mit 4 Namen gefüttert. Nun möchte ich in der Methode "public static void LaengsteWort(List<String> liste)" das Längste Wort der Datei ermitteln.
Java:
importjava.io.File;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Paths;importjava.util.List;importjava.util.Scanner;publicclass main {publicstaticvoidLaengsteWort(List<String> liste){for(int i =0; i < liste.size(); i++){// if (liste.get(i) > liste.get(i+1))// {// // }// // System.out.println(liste.get(i));}for(String n: liste){System.out.println(n.length());}// Object object1 = liste;// System.out.println(liste);}publicstaticvoidmain(String[] args){try{String filename ="C:\\Users\\Admin\\eclipse-workspace\\Übung_8-Aufgabe_2\\src\\Name";List<String> lines =Files.readAllLines(Paths.get(filename));// System.out.println(lines);LaengsteWort(lines);}catch(IOException e)//IOException, weil reaAllLines eine IOException wirft{System.out.println("Dokument exestiert nicht");}}}
[CODE lang="java" title="Name"]Hans
Gustav
Merkels
Dagobert[/CODE]
Merke dir einfach das erste Wort in einer Variablen (außerhalb der Schleife deklariert). Wenn das nächste Wort länger ist, dann ersetzt du den Wert der Variablen einfach durch das neue Wort, usw. Somit findest du das längste Wort am Ende in der Variablen.
importjava.io.File;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Paths;importjava.util.List;importjava.util.Scanner;publicclass main {publicstaticvoidLaengsteWort(List<String> liste){String first = liste.get(0);System.out.println(first);for(int i =0; i < liste.size(); i++){if(liste.get(i).length()> first.length()){
first = liste.get(i);System.out.println(first);}else{}}}
Verstehe nicht so recht was in den else Block soll.
Wenn der nächste Wert nicht größer ist, soll er ja eigentlich nichts tun
Ja super, ihr habt mir wieder geholfen es läuft. Habe jetzt einfach den else Block leer gelassen.
Gibt es aber keine elegantere Lösung, um bei ArrayLists nach der Größe sortieren? Die bieten ja eigentlich ziemlich viele Funktionen. Aber irgendwie bin ich auf keine gekommen.
Ja super, ihr habt mir wieder geholfen es läuft. Habe jetzt einfach den else Block leer gelassen.
Gibt es aber keine elegantere Lösung, um bei ArrayLists nach der Größe sortieren? Die bieten ja eigentlich ziemlich viele Funktionen. Aber irgendwie bin ich auf keine gekommen.
Also einen leeren else Block kannst Du auch einfach weglassen.... Ein if braucht kein else.
Und ein Array mit Strings zu sortieren ist natürlich etwas anderes, als das längste Elemente zu bekommen... Aber mit einem einfachen Comparator kannst Du da schnell sortieren, also als Comparator etws angeben wie: Comparator.comparingInt(String::length)
was in etws länger dem folgenden Lambda entspricht: (s1, s2) -> Integer.compare(s1.length(), s2.length())
Comparator kannst Du da schnell sortieren, also als Comparator etws angeben wie: Comparator.comparingInt(String::length)
was in etws länger dem folgenden Lambda entspricht: (s1, s2) -> Integer.compare(s1.length(), s2.length())
Da ist wichtig, dass Du das Vorgehen bei den Interfaces Comparator und Comparable verstanden hast ... (Hier natürlich das erstere). Denn das ist halt etwas, das man angeben kann. Und da Comparator nur eine Methode verlangt, ist es möglich, diese als Lambda Ausdruck darzustellen. Stichwort: funktionales Interface. Das nur noch als zusätzliche Erläuterung, denn ohne das ist der Lambda so nicht wirklich verständlich.