r.euch Geschrieben 1. August 2009 Teilen Geschrieben 1. August 2009 Hallo. Ich möchte mich mehr mit Java beschäftigen, rein privat erstmal, keine Schulaufgabe oder ähnliches. Als erstes Lern-/Spassprogramm habe ich mir "Silben mischen" ausgedacht, dass soll (z.B.) _alle_ möglichen Kombinationen von 5 Silben (z.B.) AA, BB, CC, DD, EE ausgeben, wobei jede Silbe maximal einmal (oder gar nicht) verwendet werden darf. Möglich ist also - DDBBCC (nur drei Silben benutzt) - EEAABBCCDD nicht aber: AADDAACC (Silbe AA doppelt verwendet) Ich brauche also ein Array von Strings, in die ich die Silben einlese und ein Array von Flags, wo ich abspeichere "Silbe1 bereits verwendet ja/nein, Silbe2 bereits verwendet ja/nein". Bloss: wie formuliere ich die Methode? Oder habe ich bereits einen Denkfehler bis hier? Spass: Nein, ich werde das Programm nicht benutzen, um festzulegen, wie ich im Superwahljahr 2009 abstimme. Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 1. August 2009 Teilen Geschrieben 1. August 2009 Ich brauche also ein Array von Strings, in die ich die Silben einlese und ein Array von Flags, wo ich abspeichere "Silbe1 bereits verwendet ja/nein, Silbe2 bereits verwendet ja/nein". Nein das brauchst Du nicht. Einfacheres Bsp Du willst die Buchstaben A B C kombinieren. Damit hast Du 2^n => 2^3 = 8 Möglichkeiten. Dazu kommen dann noch 3!, nämlich diese in der Du je die einen Buchstaben weglässt (3! = 3 Fakultät = 3 * 2 * 1 = 6): D.h. für n Zeichen hast Du 2^n + n! Kombinationen. Ob wir das nun für Zeichen oder bei Dir eben für Silben machen, ist relativ egal. Wir sagen einfach, dass Du n Elemente hast. Bloss: wie formuliere ich die Methode? Oder habe ich bereits einen Denkfehler bis hier? Du brauchst dafür keine Methode. Du kannst alles in Deine main-Methode rein schreiben. Du musst Dir nun überlegen wie Du eben die 2^n Kombinationen ermittelst und wie Du die n! Kombinationen ermittelst. Das geht mit Schleifen, in denen Du die Elemente entsprechend durchläufst. Die Idee mit dem Array ist gut, denn darin kannst Du Deine Elemente ablegen Viel Spaß dabei Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 1. August 2009 Autor Teilen Geschrieben 1. August 2009 Nein das brauchst Du nicht. Einfacheres Bsp Du willst die Buchstaben A B C kombinieren. Damit hast Du 2^n => 2^3 = 8 Möglichkeiten. Dazu kommen dann noch 3!, nämlich diese in der Du je die einen Buchstaben weglässt Danke erstmal Hmmm. mal gucken: ABC + ACB + BAC + BCA + CAB + CBA = 6 drei"silbige" Möglichkeiten AB + AC + BA + BC + CA + CB = 6 zwei"silbige" Möglichkeiten A + B + C = 3 ein"silbige" Möglichkeiten Macht zusammen 15, oder? Ich würde als drei Schleifen programmieren, abgestuft nach Silbenzahl, oder? Davon die erste mit zwei inneren Schleifen, und die zweite mit einer inneren Schleife? Scheint mir irgendwie wenig objektorientiert, oder habe ich da einen Denkfehler? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 1. August 2009 Teilen Geschrieben 1. August 2009 Sorry hatte mich vertan, ich war im Dualsystem im Kopf, bei 3 Bits hab ich 2^3 Möglichkeiten. Also bei n Elementen hast Du n! Möglichkeiten diese zu kombinieren. Da aber Deine Elemente Gruppierungen aus sich selbst sind, hast Du für ein silbige Mengen n Kombinationen und (m-1)*n! für alle anderen mehrsilbigen Mengen. Damit hast n + (m-1)*n! Möglichkeiten wobei n die Anzahl Deiner "Buchstaben" und m die Anzahl Deiner Silben sind. In Deinem Fall n = 4 (A B C D) und m = 2 (für AA, BB, CC, DD) => 4 + 1*4! = 4 + 24 = 28 Kombinationen. Man kann das prozedural oder auch mit der OOP lösen. Wenn Du mit Objekten arbeitest, dann musst Du Dir dafür ein Konzept überlegen. Ich würde das eher mathematisch motiviert und unabhängig von den Daten programmieren. Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 2. August 2009 Autor Teilen Geschrieben 2. August 2009 Man kann das prozedural oder auch mit der OOP lösen. Wenn Du mit Objekten arbeitest, dann musst Du Dir dafür ein Konzept überlegen. Ich würde das eher mathematisch motiviert und unabhängig von den Daten programmieren. Ähm, *nixblick* kannst Du das bite mit Code-Beispielen nochmal erklären? Bin Java-Neuling Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 2. August 2009 Teilen Geschrieben 2. August 2009 Ähm, *nixblick* kannst Du das bite mit Code-Beispielen nochmal erklären? Bin Java-Neuling Wie wäre es, wenn Du zunächst es prozedural in der main-Methode löst und wenn das funktioniert gehst Du in das OOP Konzept. Es bringt vom Lerneffekt nichts, wenn ich Dir hier meine Lösung präsentiere, Du muss sie gerade am Anfang selbst entwickeln Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 2. August 2009 Autor Teilen Geschrieben 2. August 2009 Wie wäre es, wenn Du zunächst es prozedural in der main-Methode löst und wenn das funktioniert gehst Du in das OOP Konzept. Das mit den drei For-Schleifen hintereinander (je nach Silbenzahl) ist doch prozedural, oder? Wie soll das mit OOP gehen? <-- Das ist mein Frage. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 2. August 2009 Teilen Geschrieben 2. August 2009 Das mit den drei For-Schleifen hintereinander (je nach Silbenzahl) ist doch prozedural, oder? Prozedurale Programmierung ? Wikipedia Wie soll das mit OOP gehen? <-- Das ist mein Frage. Wie ich es schon geschrieben hatte, in dem Du es abstrakter betrachtest, sprich nicht 2 silbige Elemente betrachtest, sondern Mengen von Elementen, die dann Deinen Kriterien entsprechend verarbeitet werden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 2. August 2009 Autor Teilen Geschrieben 2. August 2009 Wie ich es schon geschrieben hatte, in dem Du es abstrakter betrachtest, sprich nicht 2 silbige Elemente betrachtest, sondern Mengen von Elementen, die dann Deinen Kriterien entsprechend verarbeitet werden Und wie geht das? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 2. August 2009 Teilen Geschrieben 2. August 2009 Und wie geht das? Es gibt für so etwas keine Step-by-Step Anleitung. Das muss man lernen. Man erzeugt entsprechend Klassen und deren Assoziationen bzw Ableitungen. Man bildet eben Strukturen aus der realen Welt in Quellcode ab. WIe der Quellcode später konkret aussieht ist dann von der Sprache abhängig, bei Java eben "class xyz {}", in der sich dann noch Eigenschaften und Methoden befinden. Beispiele findest Du dazu in entsprechender Literatur. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 2. August 2009 Autor Teilen Geschrieben 2. August 2009 In Deinem Fall n = 4 (A B C D) und m = 2 (für AA, BB, CC, DD) => 4 + 1*4! = 4 + 24 = 28 Kombinationen. Ich komme auf 33 Möglichkeiten, was mache ich falsch? ABCD --- 1 viersilbiges Wort ABC + ABD + ACB + ACD + BAC + BAD + BCA + BCD + CAB + CAD + CBA + CBD + DAB + DAC + DBA + DBC --- 16 dreisilbige Worte AB + AC + AD + BA + BC + BD + CA + CB + CD + DA + DB + DC --- 12 einsilbige Worte A + B + C + D --- 4 einsilbige Worte Beispiele findest Du dazu in entsprechender Literatur. Wenn Du der Meinung bist, dass Beispiele alles sind, warum schliesst Du nicht einfach diesen Forenbereich, Herr Moderator Java? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 2. August 2009 Teilen Geschrieben 2. August 2009 Ich komme auf 33 Möglichkeiten, was mache ich falsch? Es wäre hilfreich, wenn Du für Dein Problem, das nicht konsistent beschrieben ist, einen regulären Ausdruck bzw. einen allgemein gültigen Ausdruck. Ich kann nur nur hier mehr raten, wie das Aussehen soll. Am Anfang hast Du nur 2 Silben, mit denen Du arbeitest, nun hast Wörter. Wo ist dort der Zusammenhang? Wenn Du der Meinung bist, dass Beispiele alles sind, warum schliesst Du nicht einfach diesen Forenbereich, Herr Moderator Java? Ein Forum ist nicht dazu gedacht, dass man Dir hier Dir das komplette Konzept der OOP beibringt. Ich empfehle Dir das Buch Lehrbuch Grundlagen der Informatik von Helmut Balzert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 3. August 2009 Autor Teilen Geschrieben 3. August 2009 Es wäre hilfreich, wenn Du für Dein Problem,..., einen regulären Ausdruck bzw. einen allgemein gültigen Ausdruck specifikation"mischprogramm4" begin lese Textbausteine ein(); // ein Textbaustein bestehe hier aus einem Buchstaben A oder B oder C oder D - Erweiterbar auf weitere und mehrere Buchstaben aber einplanen do while (noch nicht ALLE möglichen Kombinationen ausgegeben sind) erzeuge silbe aus einbisvierTextbausteinen ohnedass ein Textbaustein innerhalb einer silbe mehrfach verwendet wird. gebe silbe aus done endspecification "Erlaubte" Ausgabemenge ist also mindestens (insgesamt) ABCD + ABDC + ACBD + .... ABC + ABD + ACB + ACD + BAC + BAD + BCA + BCD + CAB + CAD + CBA + CBD + DAB + DAC + DBA + DBC AB + AC + AD + BA + BC + BD + CA + CB + CD + DA + DB + DC A + B + C + D "nicht erlaubte" Ausgabemenge ist also ABBA // zwei Textbausteine ("A" und "B") doppelt verwendet ADAC // ein Textbaustein "A" doppelt verwendet BABBEL // mehr als vier Buchstaben und unerlaubte Textbausteine "E" und "L" Ein Forum ist nicht dazu gedacht, dass man Dir hier Dir das komplette Konzept der OOP beibringt. Was OOP ist, war nicht meine Frage. Meine Frage war, wie ich das konkrete Programm "Silben Mischen" mittels Methoden (d.h. ohne BASIC-artige FOR/NEXT-Schleifen umsetze). Dürf ruhig alles "public"-Aufrufe sein, Stil zählt nicht. Wenn Du das nicht kannst, dann heisst das nicht, dass ich mehr lesen muss - gibt ja noch andere Leute hier im Forum. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 3. August 2009 Teilen Geschrieben 3. August 2009 Wenn Du das nicht kannst, dann heisst das nicht, dass ich mehr lesen muss - gibt ja noch andere Leute hier im Forum. Es geht hier nicht darum ob er es kann oder nicht, man will hier eigeninitiative von den Nutzern sehen. Dir wird zu einem bestimmten Problem geholfen und nich zu einem ganzen Programm... Mach dir einfach mal selbst gedanken darueber warum und wie man dein Programm in Objekte einteilen kann / darf / sollte. Mal es auf, schreibs zusammen, stells hier rein... Danach wird dir Phil, oder jemand anderes, bestimmt auch noch einmal etwas dazu sagen. Aber vorkauen wird dir hier sichlich niemand etwas. Ted Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 3. August 2009 Teilen Geschrieben 3. August 2009 Wenn Du das nicht kannst, dann heisst das nicht, dass ich mehr lesen muss - gibt ja noch andere Leute hier im Forum. Bevor Du mir unterstellst, dass ich das nicht kann, kannst Du gerne mal einen Blick auf meine Webseite oder auch mein Profil hier werfen. Dann wirst Du sehen, dass ich das kann. Im Gegensatz zu Dir bin ich kein Anfänger, ich erwarte Eigeninitiative. Da es Dir aber wichtiger ist hier Leute "anzumachen", bekommst Du von mir keine Antwort mehr. Außerdem ist dein Problem, wenn man es richtig beschreibt, banal und in einigen Minuten in OOP lösbar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 3. August 2009 Autor Teilen Geschrieben 3. August 2009 Es geht hier nicht darum ob er es kann oder nicht, man will hier eigeninitiative von den Nutzern sehen. Eigeniniative einfaordern, ohne danach Hilfe anzubieten = ganz unterste Schublade. Nein, werfen mit ganzen Büchern ist keine Hilfe. Und sagen, was man alles nicht tut, ist auch keine Hilfe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. August 2009 Teilen Geschrieben 3. August 2009 ABC + ABD + ACB + ACD + BAC + BAD + BCA + BCD + CAB + CAD + CBA + CBD + DAB + DAC + DBA + DBC Da fehlen aber ein paar... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 3. August 2009 Autor Teilen Geschrieben 3. August 2009 Da fehlen aber ein paar... Hast 2 Beispiele für "fehlende"? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 3. August 2009 Teilen Geschrieben 3. August 2009 Hast 2 Beispiele für "fehlende"? ADC BDA ... Ted Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 3. August 2009 Autor Teilen Geschrieben 3. August 2009 Naja, ich hab ja auch geschrieben "Erlaubte" Ausgabemenge ist also mindestens Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. August 2009 Teilen Geschrieben 3. August 2009 Hast 2 Beispiele für "fehlende"? Es fehlen alle mit D in der Mitte, und die zwei, die mit DC anfangen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. August 2009 Teilen Geschrieben 3. August 2009 Was OOP ist, war nicht meine Frage. Meine Frage war, wie ich das konkrete Programm "Silben Mischen" mittels Methoden (d.h. ohne BASIC-artige FOR/NEXT-Schleifen umsetze). Ich glaube, was OOP ist, sollte hier durchaus die Frage sein. OOP heißt nicht, auf for-Schleifen zu verzichten, und for-Schleifen sind auch nicht "BASIC-artig". Auf unterster Ebene ist man mit OOP letzten Endes doch wieder prozedural - Sequenz, Schleife, Verzweigung. Wenn Du das nicht kannst, dann heisst das nicht, dass ich mehr lesen muss - gibt ja noch andere Leute hier im Forum.Du wirst wohl noch merken, dass man hier nur mit sehr viel Glück an fertigen Code kommt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 3. August 2009 Autor Teilen Geschrieben 3. August 2009 Okay, und wie komme ich zu einer Methode, darum gehts doch bei OOP? Nein, die fertige Methode ist nicht gefragt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. August 2009 Teilen Geschrieben 3. August 2009 Okay, und wie komme ich zu einer Methode, darum gehts doch bei OOP? Nein, darum geht's nicht bei OOP. Wenn du deinen prozeduralen Code in eine Methode und diese wiederum in eine Klasse packst, hast du keinen objektorientierten Code. Aber das hier alles zu erklären, würde zu weit führen. Das Forum ist keine Tutorialmaschine. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
r.euch Geschrieben 3. August 2009 Autor Teilen Geschrieben 3. August 2009 Ich glaube, was OOP ist, sollte hier durchaus die Frage sein. OOP heißt nicht, auf for-Schleifen zu verzichten, und for-Schleifen sind auch nicht "BASIC-artig". Auf unterster Ebene ist man mit OOP letzten Endes doch wieder prozedural - Sequenz, Schleife, Verzweigung. Nein, darum geht's nicht bei OOP. Wenn du deinen prozeduralen Code in eine Methode und diese wiederum in eine Klasse packst, hast du keinen objektorientierten Code. Da widerspricht sich was, scheint mir. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.