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 habe ein Programm das alle Permutationen von einem String ausgibt. Nun möchte ich die Ausgabe auf Wörter beschränken, die man aussprechen kann, also z.B. maximal 2 Konsonaten --> mind. 1 Vokal. Leider fehlt mir noch das Wissen/Verständnis um einen Ansatz zu finden. Ich wäre froh über einen kleinen Denkanstoß
Geh das Schritt für Schritt an:
a) kannst du alle Permutationen bilden?
Wenn Du das kannst, dann kommen erst die nächsten Anforderungen: Du willst scherstellen, dass jede erstellte Lösung valide ist:
b) kannst Du Konsonanten zählen?
c) kannst Du Vokale zählen?
d) kannst Du die Bedingung darstellen?
Hallo,
ich habe ein Programm das alle Permutationen von einem String ausgibt. Nun möchte ich die Ausgabe auf Wörter beschränken, die man aussprechen kann, also z.B. maximal 2 Konsonaten --> mind. 1 Vokal. Leider fehlt mir noch das Wissen/Verständnis um einen Ansatz zu finden. Ich wäre froh über einen kleinen Denkanstoß
Alle Permutationen werden gebildet, das stimmt so weit.
Allerdings weiß ich nicht wie ich Konsonanten usw. zählen kann, ich hab das vorher noch nie gemacht.
Also was mir spontan einfällt :
du kannst aus der Klasse Permutationen prüfen mit regulären Ausdrücken prüfen z.B ob 2 Vokale enthalten und diese Permutation dann sich merken
Alle Permutationen werden gebildet, das stimmt so weit.
Allerdings weiß ich nicht wie ich Konsonanten usw. zählen kann, ich hab das vorher noch nie gemacht.
Gerne, das ist mein Code bisher:
Java:
public class Permutationen {
public static void main (String [] args){
String s1 = args [0];
System.out.println("Permutationen von '"+s1+"':");
String lowercase = s1.toLowerCase();
printAnagrams(lowercase);
}
public static void printAnagrams(String word) {
printAnagrams("", word);
}
private static void printAnagrams(String prefix, String word) {
int n = word.length();
if (n == 1) {
System.out.println(prefix + word);
}
else {
for (int i = 0; i < n; i++)
printAnagrams(prefix + word.charAt(i), word.substring(0, i) + word.substring(i+1, n));
}
}
das schießt doch über das ziel komplett hinaus und das erste Ziel ist nicht eine Permutation sofort auszugeben sondern mal überhaupt irgendwas mit Strings zu machne... falls der TE das gepackt hat kann man sich ein neues Ziel setzen
Als erstes musst du mal erkennen, ob ein Zeichen eine Konsonante ist. Eine einfache Möglichkeit ist, sich einen String anzulegen, der alle Konsonanten enthält und dann zu prüfen, ob das Zeichen im String vorhanden ist, die Methode würde in etwa so ausschauen.
Java:
private boolean isConsonant(char c){
//TODO Prüfen, ob c in stringWithAllConsonants enthalten ist und den Wert als Ergebnis der Methode liefern
}
//Den String kann man als Klassenvariable definieren, damit er - ohne Optimierung durch den Compiler - beim Ausführen der Methode nicht jedesmal neu erzeugt wird.
private final String stringWithAllConsonants=".....";
Dann erstelle eine Methode, die für jeden Char des Eingabetrsings prüft, ob es sich um eine Konsonante handelt. Falls ja, dann wird ein Zähler erhöht.
Java:
private int countConsonants(String word){
int counter = 0;
//TODO: Für jedes Zeichen in word prüfen, ob es sich um eine Konsonante handelt. In dem Fall den Zähler um 1 erhöhen.
return counter;
}
Dann hast du schon mal einen Teil erledigt. Wenn das passt, gehe über zum nächsten Schritt, der Formulierung, ob ein Wort mit x Konsonanten für die weitere Behandlung gültig ist oder nicht.
Kleiner Tip: Fange so früh wie möglich mit Dokumentieren an. Für jede Methode sollte es vor dem Header einen klar lesbaren Text geben, was sie eigentlich macht.