Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Wörter einer spezifizierten Länge zurückgeben
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Wörter einer spezifizierten Länge zurückgeben
arhzz
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.10.2020
Mitteilungen: 118
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2021-04-08


Hallo!
Konstruieren Sie einen Algorithmus wordsOfLength(words,length) nach der  Der Algorithmus bekommt eine per Leerzeichen getrennte Liste von Wörtern und einen Integer als Eingabe in der Kommandozeile, und gibt alle Wörter der
spezifizierten Länge in der Kommandozeile aus. Die Reihenfolge der ausgegebenen Wörter ist
hierbei frei wählbar
Java
import java.util.Arrays;
public class test {
	public static String wordsOfLength(String words, int length) {
 
		for(int i = 0; i < words.length(); i++) {
			if(words.charAt(i) != ' ') {
				cnt++;
			}
		}
		for(int i = 0; i < words.length(); i++) {
			if(cnt == length) {
				foundWords += words.charAt(i);
			}
		}
		return foundWords;
	}
 
 
	public static void main(String[] args) {
		Out.print("Please input a text:");
		String words = In.readString();
		Out.print("Please input a length:"); 
		int length = In.readInt();
		Out.println(wordsOfLength(words,length));
	}
}
 
 

Also der problem ist das die return methode nicht richtig funktioniert.Es gibt den Leeren Array zuruck und ich will das es den neuen array den ihn mit den chars fulle zuruckgibt.Das wurde mir weiterhelfen weil ich sehen konnte wie der neue string aussieht.Was muss ich umandern so dass es mir den ausgefullten array zuruckgibt?




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Sismet
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 22.03.2021
Mitteilungen: 100
Wohnort: Heidelberg
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2021-04-08


Hey,
ich kenn mich mit der Java-Syntax nicht so gut aus, aber da liegt nicht das Hauptproblem, dennoch denke ich das cnt und foundWords irgendwo initialisiert werden müssen.

Die Funktion die du geschrieben hast macht aber auch mit richtiger Syntax nicht das Richtige.
In der ersten for-Schleife zählt cnt wie viele nicht space Zeichen in deiner Zeichenkette sind.
In deiner 2. Schleife versuchst du die i-te stelle deiner Eingabe in foundWords zuschreiben. Das geht in deinem Code aber nur wenn cnt==length ist, also wenn die Anzahl aller nicht Space-Zeichen gleich length ist. Das ist in deinen Versuchen vermutlich nie der Fall gewesen und das soll ja auch nicht der Sinn des Algorithmus sein.

Arbeite mit split() das erleichtert die Aufgabe deutlich.

Grüße
Sismet



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2850
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2021-04-08


Grundsätzlich ist es hilfreich, so ein Problem in Teilprobleme zu zerlegen.

1. Spalte den Satz in eine Liste oder ein Array von Wörtern auf.
2. Filtere alle Wörter passender Länge.



Eine funktionale Quick&Dirty-Variante könnte so aussehen:
Java
  1. import java.util.Arrays;
  2. import java.util.stream.Collectors;
  3. import java.util.stream.IntStream;
  4.  
  5. public class WordFilter {
  6.  
  7. public static String wordsOfLength(String words, int length){
  8. return Arrays.stream(words.split(" "))
  9. .filter(w->w.length()==length)
  10. .collect(Collectors.joining(" "));
  11. }
  12.  
  13. public static void main(String[] args){
  14. var list = "John likes to program in Java";
  15. IntStream.range(1, 8)
  16. .forEach(len -> System.out.println(len + " -> " + wordsOfLength(list, len)));
  17. }
  18.  
  19. }

Ausgabe:
1 ->
2 -> to in
3 ->
4 -> John Java
5 -> likes
6 ->
7 -> program



-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
arhzz
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.10.2020
Mitteilungen: 118
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2021-04-08


Ja mit streams habe ich noch nie gearbeitet.Ich probiere eine andere variante aufzubauen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2850
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2021-04-09


Es geht selbstverständlich auch im C-Style ohne besondere Hilfsfunktionen.
Java
  1. /**
  2.   * Skip occurences of delim (probably whitespace)
  3.   * and return the index behind them.
  4.   * @param words The sequence to work on.
  5.   * @param idx The idx at which to start
  6.   * @param delim The delimiter to be skipped.
  7.   * @return Index behind delimiters.
  8.   */
  9. public static int skip(String words, int idx, char delim){
  10. // While not eof and char equals delim
  11. while (idx < words.length() && words.charAt(idx) == delim)
  12. ++idx; // increase idx
  13. return idx;
  14. }
  15.  
  16. /**
  17.   * Get the next word in a sequence.
  18.   * @param words The sequence to work on.
  19.   * @param idx The idx at which to start
  20.   * @param delim The delimiter at which to stop.
  21.   * @return The String between idx and next delimiter.
  22.   */
  23. public static String nextWord(String words, int idx, char delim){
  24. // Create an empty String to append to
  25. // While not eof and not char equals delim
  26. while (idx < words.length() && words.charAt(idx) != delim)
  27. next.append(words.charAt(idx++)); // append to String
  28. return next.toString();
  29. }
  30.  
  31. /**
  32.   * Get a "list" of Strings with given length.
  33.   * @param words The sequence to work on.
  34.   * @param length The length to search for.
  35.   * @return A String with the found words separated by ' '.
  36.   */
  37. public static String wordsOfLength(String words, int length){
  38. // Skip whitespace at front of "words"
  39. int idx = skip(words, 0, ' ');
  40. // Create an empty pseudo-list to store the words
  41. // while not eof
  42. while (idx < words.length()){
  43. // Read next word
  44. String next = nextWord(words, idx, ' ');
  45. // If it fits ...
  46. if (next.length() == length){
  47. // append to list
  48. lst.append(next).append(' ');
  49. }
  50. // Find next word
  51. idx += next.length();
  52. idx = skip(words, idx, ' ');
  53. }
  54. return lst.toString();
  55. }

So ein Code sieht natürlich sehr nach 90er-Jahre aus.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
arhzz
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.10.2020
Mitteilungen: 118
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, vom Themenstarter, eingetragen 2021-04-10


Ja,leider bin ich nicht so wirklich ein guter programier.Allerdings danke dir fur deine hilfe und ich kann dir gern mein Code zeigen(70-er vibe).
Java
import java.util.Arrays;
public class wordsOfLength {
 
	public static String[] splitString (String s) {
		return s.split (" ");
	}
 
	public static String wordsOfLength(String words,int length) {
		String foundWords = "";
		String[] split = splitString((words));
		for(int i=0; i <split.length; i++){
            if(split[i].length()== length){
                 foundWords += split[i] + ",";
            }
         }
		 return foundWords;
    }
 
    public static void main(String[] args) {
 
        System.out.print("Please input the text: ");  
        String words = In.readString();
		System.out.print("Please input the length:");
		int length = In.readInt();
        Out.println(wordsOfLength(words,length));
    }
}
 
 



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 394
Wohnort: Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2021-04-12


Man kann es auch mit Regexen machen...
Java
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
 
public class WordsHavingSameLength {
    public static void main(String[] args) {
        printWords("Heute wird unser Algorithmus getestet wir werden sehen ob er funktioniert", 5);
    }
 
    public static void printWords(String stringToSearch, int i) {
        Pattern.compile("(?<![^\\s])([^\\s]{"+i+"})(?![^\\s])")
                .matcher(stringToSearch)
                .results()
                .map(MatchResult::group).forEach(w -> System.out.println(w));
    }
}

Bezüglich deiner Eingangsfrage: Es wäre hilfreich, wenn dein Code nicht rot ist, wenn man ihn in eine Entwicklungsumgebung kopiert. Wie soll die return-Methode etwas zurückgeben, wenn man den Code nicht kompilieren kann?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
arhzz hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]