Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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?

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

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

Ä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

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.

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

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?

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.

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?

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.

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.

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

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.

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.

Da fehlen aber ein paar...

Hast 2 Beispiele für "fehlende"?

Naja, ich hab ja auch geschrieben

"Erlaubte" Ausgabemenge ist also mindestens
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.

Okay, und wie komme ich zu einer Methode, darum gehts doch bei OOP? Nein, die fertige Methode ist nicht gefragt.

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.

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.