Kürzeste Wörter bestimmen

clair1

Mitglied
hallo zusammen
bei folgende Code bekomme ich nicht das richtige Ergebnis.Es soll die kürzeste Wörter ausgeben, aber das macht er nicht !
z.B hier System.out.println(getShortestWords("Dies ist so ein einfaches Beispiel"));
soll nur "so" ausgeben aber er gibt "ist" und "so" aus
Java:
//
import java.util.ArrayList;
import java.util.Arrays;

import java.util.List;



/**

 * Created by Clair on 12/19/2016.

 */

public class Recursiv1 {

    public static void main(String[] args){

        String string="das ist ein  beispiel";

        List<String> list=getShortestWords(string);

      Object[] result=  list.toArray();

        System.out.println(Arrays.toString(result));

      

        System.out.println(getShortestWords("Dies ist so ein einfaches Beispiel"));

        System.out.println(getShortestWords(""));

    }



    private static List<String> getShortestWords(String string) {

        String[] strs=string.split(" ");

        return rec(strs,strs[0],1);

    }



    private static List<String> rec(String[] strs, String str,int index) {

        List<String> st= new ArrayList<>();

        if(index==strs.length)

            return  st;

        if(str.length()>strs[index].length()) {

            st.add(strs[index]);

            st.addAll( rec(strs, strs[index], index + 1));

            return st;

        }

        else if(str.length()<strs[index].length()){

            List<String> stringList = rec(strs, str, index + 1);

            if(stringList.size()>0 && stringList.iterator().next().length()<str.length())

                return stringList;

            else {



                st.addAll(stringList);

                return st;

            }

        }

        else {

            st.add(str);

            st.addAll(rec(strs,strs[index],index+1));

            return st;

        }



    }

}
 
Zuletzt bearbeitet:

JCODA

Top Contributor
Bitte verwende Code Tags: [code=java]//JAVA CODE HERE !!!!! [/code]

Tipp: Du brauchst innerhalb der Rekursion keine Liste, und du benötigst innerhalb der Methode nur ein If-Else um den Längenvergleich durch zu füheren und ein If, um zu testen, ob du am Ende des Arrays angekommen bist.

EDIT: OH, ich hab die Aufgabe falsch verstanden...
 

JCODA

Top Contributor
Ich hatte gehofft, man kann das viel eleganter lösen... Ich bin auch der Meinung es geht besser, aber das ist alles was ich hinbekommen habe:
Java:
import java.util.ArrayList;
import java.util.List;

public class Recursiv10 {

    public static void main(String[] args) {

        System.out.println(getShortestWords("das ist ein beispiel"));
        System.out.println(getShortestWords("Dies ist so ein einfaches Beispiel"));
        System.out.println(getShortestWords(""));

    }

    private static List<String> getShortestWords(String string) {
        String[] strs = string.split(" ");
        return rec(strs, strs[0], 0);
    }


    private static List<String> rec(String[] strs, String shortest, int index) {
        List<String> result = new ArrayList<>();
        if (index == strs.length) {
            return result;
        }
        String current = strs[index];
        if (shortest.length() == current.length()) {
            result.add(current);
            List<String> subResult = rec(strs, shortest, index + 1);           
            if (!subResult.isEmpty() && subResult.get(0).length() < shortest.length()) {
                result = subResult;
            } else {
                result.addAll(subResult);
            }
            return result;
        } else if (shortest.length() < current.length()) {
            return rec(strs, shortest, index + 1);
        } else if (shortest.length() > current.length()) {
            return rec(strs, current, index);
        }

        return result;

    }

}
 

stg

Top Contributor
Warum denn überhaupt mit Rekursion und Tralala und nicht ganz simpel halten? Dann versteht man auch auf Anhieb, was der Code macht.

Java:
private static List<String> getShortestWords(String string) {
    int minLengthFound = Integer.MAX_VALUE;
    List<String> result = new ArrayList<>();
    for(String str : string.split(" ")) {
        int currentLength = str.length();
        if(currentLength < minLengthFound) {
            minLengthFound = currentLength;
            result.clear();
            result.add(str);
        } else if(currentLength == minLengthFound) {
            result.add(str);
        }
    }
    return result;
}

...kann man natürlich noch aufhübschen, wenn man CleanCode mag. Soll nur ein erster Ansatz sein.
 

Flown

Administrator
Mitarbeiter
Da ja schon so schöne Lösungen da stehn, evtl was mit Endrekursion?
Java:
private static List<String> getShortestWords(String string) {
  Objects.requireNonNull(string);
  return getShortestWords(string.split("\\s+"), 0, Integer.MAX_VALUE, new ArrayList<>());
}

private static List<String> getShortestWords(String[] words, int i, int shortestLength, List<String> shortestWords) {
  if (i == words.length) {
    return shortestWords;
  }
  final String word = words[i];
  final int wordLength = word.length();
  final int compare = Integer.compare(wordLength, shortestLength);
  if (compare < 0) {
    shortestWords.clear();
  }
  if (shortestWords.isEmpty() || compare == 0) {
    shortestWords.add(word);
    return getShortestWords(words, i + 1, wordLength, shortestWords);
  }
  return getShortestWords(words, i + 1, shortestLength, shortestWords);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
K Java Standardbib/reservierte Wörter erweitern Allgemeine Java-Themen 1
B Java Audio in Wörter/Phonems aufteilen Allgemeine Java-Themen 0
OlafHD Prozentualer Abgleich von zweit Sätzen/Wörter Allgemeine Java-Themen 5
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
D Wörter aus Datei einlesen Allgemeine Java-Themen 9
K Wörter in Strings zählen Allgemeine Java-Themen 7
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
T Wörter Vergleichen Allgemeine Java-Themen 3
G Regulärer Ausdruck für 2 Wörter Allgemeine Java-Themen 3
D Wort in Text mit >100.000 Wörter finden Allgemeine Java-Themen 7
S Wörter ohne Leerzeichen erkennen Allgemeine Java-Themen 5
J Neue Wörter bilden Allgemeine Java-Themen 10
L Textdatei nach Wörter durchsuchen Allgemeine Java-Themen 3
J String Wörter zählen Allgemeine Java-Themen 4
M Wörter Algorithmus Allgemeine Java-Themen 7
M JTextPane Mausklick auf bestimmte Wörter startet Aktion Allgemeine Java-Themen 8
S Wörter ersetzen mit regex Allgemeine Java-Themen 11
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
S Best Practice Punkt im dreidimensionalen Raum Bestimmen Allgemeine Java-Themen 24
C Movement auf bestimmten Weg bestimmen Allgemeine Java-Themen 11
ralfb1105 Java LogManager property bestimmen/ausgeben Allgemeine Java-Themen 1
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
GreenTeaYT Turtle Richtung bestimmen und Consl? Allgemeine Java-Themen 3
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
J Sortieralgorithmus, Komplexität bestimmen Allgemeine Java-Themen 3
A Selbsterstellte 404-Seiten bestimmen, die sich als 200 ausgeben Allgemeine Java-Themen 8
A Winkel bestimmen Allgemeine Java-Themen 5
S spaltenweise Maximalwert bestimmen Allgemeine Java-Themen 12
M ImageJ-Wie kann ich die Abstände von 2 Kreisen bestimmen Allgemeine Java-Themen 6
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
kodela Arbeitspfad einer JAR-Datei bestimmen Allgemeine Java-Themen 4
P Wie Laufwerke bestimmen ? Allgemeine Java-Themen 7
E String Overlapping bestimmen Allgemeine Java-Themen 3
D Bild Typ bestimmen Allgemeine Java-Themen 9
A STackgrösse bestimmen Allgemeine Java-Themen 5
C Wie kann man die IText Table Position bestimmen? Allgemeine Java-Themen 3
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
G log4j File erzeugen und Pfad bestimmen Allgemeine Java-Themen 3
X [Java] Internationalisierung / Language codes bestimmen Allgemeine Java-Themen 4
G Grenzwert einer Folge bestimmen Allgemeine Java-Themen 2
M Richtigen COM-Port bestimmen Allgemeine Java-Themen 14
M Mit Java CPU Typ bestimmen... Allgemeine Java-Themen 7
aze Source Folder bestimmen Allgemeine Java-Themen 2
M Drucken Schacht auswählen/bestimmen Allgemeine Java-Themen 2
F Typ eines Objekts zur Laufzeit bestimmen? Allgemeine Java-Themen 8
F Eigenschaften von MP3 Dateien bestimmen Allgemeine Java-Themen 2
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
V Beratung zum Bestimmen der "Mittel"(Java,Sql) mein Allgemeine Java-Themen 3
K CPU-Typ usw. bestimmen Allgemeine Java-Themen 10
G Subsets bestimmen Allgemeine Java-Themen 7
M Bestimmen, ob File fertig geschrieben wurde Allgemeine Java-Themen 3
B java-version bestimmen innerhalb von Programm Allgemeine Java-Themen 4
J html seite in java einbinden und url bestimmen Allgemeine Java-Themen 5
E Wie die Länge eines Array bestimmen Allgemeine Java-Themen 9

Ähnliche Java Themen


Oben