Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich möchte aus einer ArrayList den String ausgeben, der die meisten Buchstaben hat.
Code:
package level07.lesson06.task0201;
import java.util.*;
/* The longest string
1. Create an ArrayList of the strings.
2. Read 5 strings from the keyboard and add them into ArrayList
3. Using for-each cycle find the maximum lenght of all strings in this ArrayList
4. Print out all the strings that have maximum length
*/
public class Solution {
public static void main(String[] args) throws Exception {
System.out.println("Enter five strings!");
Scanner scan = new Scanner(System.in);
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
String s = scan.nextLine();
list.add(s);
}
for (int i =0; i<5;i++){
System.out.println(list.get(i).length());
scan.close();
}
// TODO: implement here
}
}
ich kriege es hin, dass der Code mir ausgibt, wieviele Stellen die Strings haben.
Was ich nicht hinbekomme, dass mir das Programm den längsten String hinschreibt.
Ich habe es schon mit Math.max probiert, aber mir wird im Endeffekt nur ausgegeben, wie die höchste Anzahl an Stellen im größten String ist.
Für jeden Ansatz bin ich sehr dankbar. Bin noch ein wenig neu auf dem Gebiet und krieg es einfach nicht hin :/
vielleicht solltest du dir vor der zweiten for-Schleife eine String-Variable anlegen und diese immer auf den längsten String zuweisen. Hierfür benötigst du wohl eine If-Anweisung mit passender Bedingung.
genau. und innerhalb der if, weißt du nun das aktuelle Listenelement dem t zu.
d.h. t speichert immer den bisher längsten String.
Dann könntest du nochmal über die Liste iterieren und alle Strings mit der Länge von t ausgeben.
Wie macht man das? Sobald ich schreibe, dass t = i oder t = list.get(i).length() ist, sagt er, dass man Strings nicht mit int vergleichen kann (was ja auch Sinn macht).
int i;
for (i = 0; i < 5; i++) {
String t = list.get(i);
if (t.length() <= list.get(i).length()) {
System.out.println();
}
}
und was kommt bei System.out.println() hin?
wenn man t oder list.get(i)eingibt, printet er einfach alle Stringsnochmal.
Bbei der Eingabe t.length() oder list.get(i).length() die Anzahl an Ziffern.
String t;
for (int i = 0; i < 5; i++) {
if (t.length() <= list.get(i).length()) {
String t = list.get(i); //Fehlermeldung: Duplicate local variable t
for (String s : list) {
if (s.length() == t.length()) {
System.out.println(s);
}
}
}
so ich habe versucht, dass umzusetzen, was du gesagt hast, also zumindestens bin ich mir ziemlich sicher, dass ich alles so umgesetzt habe wie du es meintest.
Wie gesagt, ich bin ein Anfänger, nicht böse sein, dass ich das nicht so schnell begreife.
Aber auch jetzt schonmal danke, dass du dir bisher die Zeit genommen hast.
package level07.lesson06.task0201;
import java.util.*;
import level06.lesson11.bonus01.Max;
/* The longest string
1. Create an ArrayList of the strings.
2. Read 5 strings from the keyboard and add them into ArrayList
3. Using for-each cycle find the maximum lenght of all strings in this ArrayList
4. Print out all the strings that have maximum length
*/
public class Solution {
public static void main(String[] args) throws Exception {
System.out.println("Enter five strings!");
Scanner scan = new Scanner(System.in);
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
String s = scan.nextLine();
list.add(s);
}
String t = list.get(0);
for (String s : list) {
if (t.length() <= s.length()) {
}
}
for (String s : list) {
if (t.length() == s.length()) {
System.out.println(s);
}
scan.close();
}
}
}
// TODO: implement here
Ja, man muss nur die Zeile longestString = s; entfernen
Danke
Du hast nicht wirklich verstanden, wie die Logik funktioniert oder?
Natürlich musst du die Zuweisung da lassen, sonst wird t ja garnichtmehr verändert.
Ich hab t in meinem Code nur longestString genannt, weil man eigentlich sprechende Variablennamen verwenden sollte.
Hm, es macht im Endeffekt keinen Unterschied, beide male gibt er mir den längsten String aus
und wofür der zweite Teil gut ist, verstehe ich nicht so ganz, es geht auch ohne.
Code:
}
String t = list.get(0);
for (String s : list) {
if (t.length() <= s.length()) {
System.out.println(s);
}
}
Stimmt, du hast Recht. Mein Fehler. Dementsprechend kann man auch nicht einfach die letzte Hälfte von dem Code weglassen. Hatte in dem Moment noch nicht ganz nachvollzogen wofür der gut ist.
Und ich will ja nicht an deinem Code rummeckern und er funktioniert ja auch. Aber man hätte sich nur die Länge des längsten Strings merken müssen, nicht den String selber.
Und ich will ja nicht an deinem Code rummeckern und er funktioniert ja auch. Aber man hätte sich nur die Länge des längsten Strings merken müssen, nicht den String selber.
Das stimmt, aber da am Anfang nur von "dem" größten die Rede war, wollte ich die "Idee" nicht nochmal verändern, denn sonst wäre das wieder verwirrend gewesen.
(Offtopic: Ändert auch nichts an der benötigten Speichermenge, da wir ja nur eine Referenz speichern...)
Aber das Prinzip sollte klar sein, zuerst befülle ich "zufällig", dann bestimme ich die Länge eines Strings, indem ich von Anfang bis Ende laufe, dann sortiere ich, und dann wähle ich das 1. Elem., das nur das längste sein kann.
So lernt man Proggen, erst ein paar Umwege machen. Leider gibt's in Java keine ineffizienten Sortierverfahren standardmäßig. Sonst wäre doch so etwas auch noch schön: https://de.wikipedia.org/wiki/Slowsort , um die CPU zu quälen.
import java.util.*;
/* The longest string
1. Create an ArrayList of the strings.
2. Read 5 strings from the keyboard and add them into ArrayList
3. Using for-each cycle find the maximum lenght of all strings in this ArrayList
4. Print out all the strings that have maximum length
*/
public class Solution {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
System.out.println("Enter five strings!");
try(Scanner scan = new Scanner(System.in)) {
for (int i = 0; i < 5; i++) {
list.add(scan.nextLine());
}
}
int maxLength = Integer.MIN_VALUE;
for (String s : list) {
maxLength = Math.max(s.length(),maxLength);
}
for (String s : list) {
if (maxLength == s.length()) {
System.out.println(s);
}
}
}
}