Zum Inhalt springen

Ne0Nebul0sa

Mitglieder
  • Gesamte Inhalte

    21
  • Benutzer seit

  • Letzter Besuch

  1. Hi Kai - ich hoffe, dass ich Dich so nennen darf, denn das macht die Diskussion ein wenig lockerer ;-), Danke Dir für Deine einführenden Worte. Das Projekt sollte natürlich OOP umgesetzt werden. Ich hatte einen halbwegs vollständigen Peusocode gepostet und mein erster Entwurf war doch noch recht weit weg vom endgültigen Produkt. Dank flashpixx und einer langen Nacht nun passé, bzw. abgehakt. Wichtige Gedanken und den Quellcode hat flashpixx ja veröffentlicht, sodass das Problem nun für jedermann lösbar sein sollte. Interessante Frage. Explizit gab es dafür keine Vorgabe [...](s. Nachtrag). Nachtrag: Die bessere Formulierung wäre vielleicht: Eine aller möglichen Lösungen ausgeben zu lassen, denn die Positionen der Damen werden nicht statisch (fest) vergeben, sondern in jedem Programmlauf heuristisch generiert. Insofern trifft zu. Exakt diesen Ablauf haben wir auch versucht und, soweit ich das beurteilen kann, erfolgreich gemeistert. Wie flashpixx schon sagte: Ein Struktogramm kann, muss aber nicht, hilfreich sein. Gerade für Anfänger halte ich das Lösungsprinzip für nicht schlecht, da viele damit eine Programmierungsgrundlage besitzen, da viele einfach drauf los programmieren wollen (huch, spreche ich da etwa aus Erfahrung ?). Nichtdestoweniger sollte der generelle Ablauf und auch die objektorientierte Umsetzung mit UML-Diagrammen (sofern ich das richtig verstanden habe) umgesetzt werden (,was auch Bestandteil meines Informatikunterrichts ist). Danke dafür. Allerdings kommt Deine Hilfe wohl "zu spät", denn mein Programm ist bereits, zumindest iterativ, umgesetzt worden. Flashpixx hat sogar beide Varianten. Insofern: Danke für Deine Hilfe Das ist mir auch klar geworden. Leider, das kann ich im Nachhinein sagen, ist die grafische Umsetzung in meinem Unterricht meist der erste umgesetzte Bereich. Es wird leider erst danach mit dem eigentlichen Programmieren begonnen... Danke, ja, Flashpixx hat den selben Ansatz gewählt ..und, in der Tat, es hat sich gelohnt! Danke, schöne Grüße zurück. Wir beide haben ja jezt auch zwei Programme rumliegen. Wenn Du magst, poste doch mal Dein Programm, dann haben wir einen regelrechten Auswahlpool, der späteren Interessenten eine Betrachtung des Problems aus vielen Perspektiven bietet. Nun zu Flashpixx: Gute Anmerkung, allerdings solltest Du erwähnen, dass mein Programm überhaupt erst durch eine lange Programmierungsnacht mit Dir entstehen konnte. Zudem hat es uns beide, aber vor allem Dich, viele Nerven gekostet. Deshalb: Nochmals vielen Dank dafür - und lasse Dir dein Prestige ruhig zuschreiben, das hast Du in diesem Fall wirklich verdient! Viele Grüße Alex aka Ne0
  2. Gut, das liegt nahe - Hatte ich ja bereits geschlussfolgert. Okay, inwiefern allgemeiner? Also das keine explizite Klasse Brett existiert, sondern eine Oberklasse, wie z.B. bei einer Ameise mit der Oberklasse Tier? - Das also hier lediglich beispielhaft die Klasse "Tier" existiere? Indem ich von vornherein festlege, dass die Dame sich nur in den angegebenen Längen und Breiten bewegen darf und das Brett dementsprechend groß gestalte? Die Koordinaten sollte die jeweilige Dame speichern, oder? Dann könnte sie beim Aufrufen direkt ihre Koordinaten mitgeben und jeweils angeben, ob eine Kollision existiert. Wunderbar. Das sollte ja mit der von Dir genannten Methode gehen. Natürlich, logisch. Darauf hätte ich wirklich selber kommen können. Naja.. gut.. Haken wir das ab. Mal schauen, ob ich das später auch programmieren kann Wenn ich die Methode in der Methode selbst erneut aufrufe (s. erster Entwurf), dann ist es doch rekursiv, oder nicht? Okay. Dann bin ich auf deinen Ansatz gespannt, obwohl ich in meinem Entwurf (immerhin) nur noch eine nutze :-). Ah okay. Für mich gehören Äpfel immer in einen Obstsalat, womit sich für mich auch die Frage nach den "Strukturansätzen" geklärt hätte - obwohl ich glaube, dass es nicht so einfach zu übertragen ist Ja, okay. Meintest Du, dass ich jetzt selbst das nDamen Problem nachstellen sollte mit Papier und Stift oder worauf möchtest Du hinaus? Aus Nummern und Buchstaben, in Programmierfall nur Zahlen (Nummern). Diese geben die eindeutige Position der Dame an. Schön :-) Na, wenn das (für mich) mal so einfach wäre. Dabei ist, Du wirst es kaum glauben, Mathe ein für mich eher gutes Fach (Naja, sagen wir Durchschnitt ). Ja, danke, die PN habe ich gelesen.
  3. Sorry für den Doppelpost, allerdings kann ich meinen letzten Post nicht mehr editieren. Ich habe mit meinem bisherigen Wissensstand versucht einen neuen Anlauf zu starten für das nDamen Problem. Wo ich mir nicht sicher war, schlichtweg nicht weiter kam oder einfach kommentieren wollte habe ich Hinweise hinterlassen. Teils habe ich deshalb auch Pseudocode benutzt (insgesamt liegt eine Art Mischcode (Pseudocode) vor). Bestimmte Zeilen sind von ihrer Syntax nicht korrekt (zb. "this.xy();", obwohl die Methode nicht in der eigenen Klasse steht) oder enthalten kleinere Fehler. Mir geht es aber erst einmal nur um den Inhalt. ..Ich hoffe, dass Du mir nicht wieder meine Illusion von einem Erfolg nimmst, sonst wirds langsam sehr demotivierend für mich Hier meine drei Klassen: Hauptprogramm, Dame, Brett: Klasse Dame: /** * @author * @version */ public class Damen { // Bezugsobjekte Dame aktuelleDame; // Attribute // Konstruktor public Damen(Dame paktuelleDame) { zaktuelleDame = paktuelleDame; } // Dienste public boolean waagerecht() { if() { return true; } else { return false; } } public boolean senkrecht() { if() { return true; } else { return false; } } public boolean diagonal1() { if() { return true; } else { return false; } } public boolean diagonal2() { if() { return true; } else { return false; } } public Kollision() { boolean zKollision; if(this.waagerecht() || this.senkrecht() || this. diagonal1() || this.diagonal2() ) { zKollision = true; } else { zKollision = false; } } public boolean vorherigeDame() { return zaktuelleDame; } } Klasse Hauptprogramm import sum.werkzeuge.*; /** * @author * @version */ public class Hauptprogramm { // Bezugsobjekte Rechner hatRechner; // Attribute // Konstruktor public Hauptprogramm() { hatRechner = new Rechner(); } // Dienste public static void main(String[] argc) { Brett x = new Brett(2); Brett y = new Brett(8); System.out.println("Ausgabe Brett 1:\n"+x); System.out.println("Ausgabe Brett 2:\n"+y); } public boolean alleDamengesetzt() { if() //Funktion DameSetzen n-mal ausgefuehrt? Variable uebergeben { return true; } else { return false; } } public void DameSetzen() { //aktuelle Dame setzen; naechsteDame = null; //Variable leeren , benoetigt? } public void Backtracking() { //fuer 8 Felder; Variable muss uebergeben werden ersteDame = new Dame(hatRechner.ganzeZufallszahl(1,8),hatRechner.ganzeZufallszahl(1,8)); do { if(naechsteDame == null) //keine Dame ausgewaehlt -- pruefe ob nicht die vorherige Dame aufgerufen wurde { naechsteDame = new Dame(hatRechner.ganzeZufallszahl(1,8),hatRechner.ganzeZufallszahl(1,8)); } this.Kollision(); if(zKollision = true) //wie wird geprueft, ob die alle anderen Damen kollidieren? { if() //noch nichtalle Versuche gemacht { naechsteDame = naechsteDame(hatRechner.ganzeZufallszahl(1,8),hatRechner.ganzeZufallszahl(1,8)); } else { this.vorherigeDame(); //vorherige Dame aufrufen -- was passiert mit "naechsteDame"? this.Backtracking(); //Prozedur von vorne beginnen und pruefen; rekursiv } } else { Damesetzen(); } }while(this.alleDamengesetzt()); } } Klasse Brett: /** * @author * @version */ public class Brett { // Bezugsobjekte // Attribute // Konstruktor public Brett(int pFelder) { zFelder = pFelder; } // Dienste public void erzeugeSchachbrett() { int zCounter = 0; while(zCounter < zFelder) { //erzeuge ein neues Feld zCounter++; } } }
  4. Rein theoretisch kann sie das. Aber es würde, für mich jedenfalls, keinen Sinn machen. Zumindest im Schachspiel ;-) Insofern brauche ich ein Schachbrett (..und damit eine Klasse Brett?). Die muss ja nicht unbedingt optisch, also durch eine Gui dargestellt werden. Wie lasse ich aber Schachbrett und Dame miteinader kommunizieren? Also wie weiß die Dame, wo sie steht, wenn nicht durch Koordinaten? Okay. :-) Durch einen Steigungseinheit und einer Schnittpunktkonstante, wenn ich die einzelnen Komponenten so nennen darf. Rein mathematisch ist mir das klar. Aber ich kann es einfach nicht auf Java anwenden :-(
  5. Super, danke. Mh, okay. Dann bin ich wohl noch immer auf den Holzweg. Wärst Du so nett mir die entsprechende Stelle zu zitieren? Ich bin nicht sicher, was Du meinst :-) Also stelle ich im Hauptprogramm lediglich durch den Konstruktor die entsprechenden Damen etc. her, bzw. durch eine Main-Methode? Ach, und ich setze die Damen nicht sondern prüfe vorher ob sie passen und falls nicht, dann setzen? Wie müsste ich denn die linearen Funktionen, die ich gepostet habe, in Java umsetzen? Habe mit linearen Funktionen noch nicht programmiert - zumindest nicht absichtlich ;-) ..und damit kann ich dann auch die Damenkollision erkennen. Richtig, danke. Das Aktivitätsdiagramm und das Sequenzdiagramm werde ich mir mal anschauen. Das ist mir in der Theorie auch bewusst - meist fehlt mir die logische Übetragung auf das Praxisbeispiel :-( Nichts lieber als das. Allerdings bin ich durch die Schule genötigt diesen Quark zu nutzen :-(. Insofern wäre ich froh, wenn wir damit, so schwer es auch sein mag, weiterarbeiten könnten. Okay, danke. Da kann ich wieder auf SuM zurückgreifen, wenn ich es schon nutzen muss kann ich es ja auch benutzen :-). Soll es ja nicht. Also doch eine Liste? Du verwirrst mich :-D :-D Mh, okay. Aber wie realisiere ich das ganze in OOP? Meinst Du damit rekursiv? Ich würde gerne die GUI am Ende machen, ist das okay? Nun, da die erste Position der Dame generiert wird, oder nicht? Mit "alleDamensetzen" meinte ich eben die Prozedur, eine zweite Dame an eine bestimmte Stelle zu setzen und wenn diese kollidiert, diese auf eine andere Position zu verschieben (sollte ich das auch zufällig machen oder eher strukturiert?). Nun, da die Methoden nicht mehr zum Hauptprogramm oder zur Dame gehören, oder? Klar :-). Hier nochmal die Frage: Wie mache ich das Schachbrett objektorientiert? Rekursiv? ..und n Damen platziere ich indem nach oben genannten Muster. Okay, die Main-Methode soweit klar. Ich könnte ja zusätzlich noch bei der Kollision abfragen, ob die Damenposition bereits belegt ist indem ich die gesetzte Position der Dame mit der neuen vergleiche. Wie ich auf die Idee mit der Liste kam: Wie kann ich den prüfen, wenn beispielsweise 6 (von 8) Damen platziert sind, ob die 7te nicht mit einer der anderen sechs kollidiert? Ich meine, ich könnte mir die letzte Dame (und ihre Position) in einer Variable merken, aber alle sechs Damen (und ihre Positionen?) Da liegt auch noch eine gedankliche Lücke. Danke Dir und viele Grüße Ne0
  6. okay, für die Diagonalen müsste gelten: f(x) = -1/2x+8 (von oben links nach unten rechts) und f(x) = 1/2x von unten links nach oben rechts, wenn der Ursprung unten links liegt. für die x-Koordinate setze bspw. 4 ein. Dann ist der y-Wert 6 bzw. 2?. ..und wenn ich das richtig verstanden habe tritt eine Kollision auf, wenn die neue Dame (also die Dame, dessen Position ich eben ermittelt habe) die gleiche y-Koordinate hat wie die bereits vorhandene Dame. Dazu müsste ich mir alle Koordinaten der bereits erfolgreich gesetzten Damen merken, oder? Dann könnte ich die Werte in einer Liste speichern und diese mit den neuen Koordinaten abfragen. Aber wie durchsuche ich die Liste (programmiertechnisch)? ..und wie gebe ich diese lineare Funktion in Java an? für die Horizontalen: f(x) = b (b ist variabel für die einzelnen Horizontalen) für die Vertikalen: f(x) = x Ehrlich gesagt weiß ich nicht, was die Dame können muss. Ich finde, sie sollte sich selbst erzeugen und entfernen können und wissen, wie sie laufen kann damit sie weiß, ob sie kollidiert. Aber wie die einzelnen Methoden aussehen, ist mir wieder schleierhaft. Das ich weder nach dem MVC-Prinzip strukturiert habe, ist mir jetzt auch klar geworden :upps Der Rest liegt wohl daran, dass mir der Durchblick fehlt - trotz vorheriges Struktogramm. Daher auch der . Nettes Wort übrigens Das mag sein, ich habe doch auch versucht zu einer Lösung zu kommen - auch wenn mein Spaghetticode sicherlich andere Bände spricht. Aber ich schaffe es einfach nicht "generatePosition" kannte ich nicht. Es gibt wohl in SuM eine Methode die eine Zufallsposition generiert :upps:upps (ganzeZufallszahl). Dass heißt ich gestalte meine Methode wie folgt: Generiere Position auf dem Schachbrett (für ein Schachbrett mit 8x8 Feldern): derRechner.ganzeZufallszahl(1,8),derRechner.ganzeZufallszahl(1,8) alle Damen setzen: for-schleife: bis 8 Damen: derRechner.ganzeZufallszahl(1,8),derRechner.ganzeZufallszahl(1,8) if(kollision) derRechner.ganzeZufallszahl(1,8),derRechner.ganzeZufallszahl(1,8) else zeichneDame Aber das wäre doch kein Backtracking? Alles klar, chef. Okay. Zunächst erst einmal ohne genetische Algorithmen. Den Pseudocode den ich oben gepostet habe: ist der so in Ordnung? Mein Hauptprogramm sollte (nach meinen bisherigen Ideen) folgendes machen, also: Methode "generierePosition" aufrufen, dann "alleDamensetzen". Mehr denke ich nicht. Die beiden Methoden würde ich in eine seperate Klasse packen (nicht in die Klasse "Dame"). Passt das soweit? Vielen Dank & viele Grüße Ne0
  7. Hi DerEinwanderer, Hi Flashpixx, Ich habe mittlerweile auch mein Programm umgesetzt, sehe aber den Wald vor lauter Bäumen nicht mehr.. Zum einen habe ich zwar die Backtracking-methode, aber die wird in meinem Programm nicht genutzt, da ich den wichtigen Teil des Backtrackings irgendwie in die Methode "SchachbrettDurchlaufen" eingebaut habe. Bei der Methode "bedroht" weiß ich leider noch immer nicht, wie ich die linearen Funktionen nutzen soll und dementsprechend scheiter ich auch daran. Meine Idee ist eher quantitativ als qualitativ. Weiter weiß ich nicht, wie ich die Klasse "Dame" aufbauen soll. Ich habe im Moment lediglich Methoden, die die Dame zeichnen und ich denke nicht, dass damit genüge getan ist. Allgemein weiß ich auch nicht, ob ich nicht lieber ein Typ Objekt statt des Typs Dame nehmen sollte. Denn meine Klasse Dame kann nichts, was sie grundlegend von einem Element/Objekt unterscheidet. Ob die Methoden "setzeDame" und "loescheDame" richtig sind, weiß ich auch nicht. Bisher ist mein ganzes Projekt eher ein Scheiterhaufen als ein wirklicher Erfolg :-D Mein eigentliches Ziel ist das nDamen Problem mit einer GUI darzustellen (also ein Schachbrett mit n*n Feldern und n platzierten Damen). Ich habe allerdings gehört, dass das Problem bis maximal 25 Damen (25*25 Feldern) umsetzbar sei. Danach muss wohl ein weiterer "Trick" her. Letztendlich soll das fertige Programm in etwa aussehen wie in diesem Video: Ich weiß, der Uploader stellt den Quellcode zur Verfügung, aber es wäre gut, wenn ich mit eurer Hilfe auf die Lösung käme :-) Nun mein Programmfortschritt: import sum.kern.*; /** * @author * @version */ public class nDamen { // Bezugsobjekte Bildschirm hatBildschirm; Stift hatStift; // Attribute // Konstruktor public nDamen(int DamenAnzahl) //bis maximal 25 moeglich! { hatBildschirm = new Bildschirm(); hatStift = new Stift(); } // Dienste public void DameSetzen(int x, int y, Dame pDame) { int N = 8; for(int i=0; i<N; i++)//zunaechst 8DamenPrblem DamenAnzahl) { this.SchachbrettDurchlaufen(x,y, pDame); } } public void SchachbrettDurchlaufen(int x, int y,Dame pDame) { this.zeichnen(); while(y<=8) { while(x<=8) { if(this.bedroht(pDame, x, y)) { x++; } else { this.setzeDame(pDame); } } y++; x=1; } } public void Backtracking(Dame pDame, int x, int y) { if(x == 8 && y == 8) { this.loescheDame(x, y); if(x<8) x++; else if(y<8) { y++; x=1; } else { hatStift.hoch(); hatStift.bewegeBis(500,500); hatStift.runter(); hatStift.schreibeText("Es gibt keine Loesung!"); hatStift.hoch(); } this.setzeDame(pDame); } else this.Backtracking(pDame, x, y); } public void loescheDame(int x, int y) { hatStift.radiere(); this.zeichnen(); hatStift.normal(); } public void zeichnen() { for(int i=1; i<=4; i++) { hatStift.runter(); hatStift.bewegeUm(1); hatStift.dreheUm(90); } hatStift.hoch(); hatStift.bewegeUm(1); } public boolean bedroht(Dame pDame, int x, int y) { if(x == zH) return false; else if(y == zV) return false; else if(x - y == zH - zV) return false; else if(x + y == zH + zV) return false; else return true; } public void setzeDame(Dame pDame) { this.zeichnen(); } } Meine Klasse Dame sieht wie folgt aus: import sum.kern.*; import sum.strukturen.*; /** * @author * @version */ public class Dame { // Bezugsobjekte Stift hatStift; // Attribute // Konstruktor public Dame() { hatStift = new Stift(); } // Dienste public void zeichneDame() { hatStift.runter(); hatStift.bewegeUm(1); hatStift.hoch(); hatStift.bewegeUm(-0,5); hatStift.runter(); hatStift.dreheUm(90); hatStift.bewegeUm(1); } } Danke für die Hilfe und viele Grüße Ne0 Nachtrag: Mir ist noch aufgefallen, dass bisher nur ein Feld des Schachbretts gezeichnet würde. Das ist aber für mich erst einmal nebensächlich und ist später mit weiteren Schleifen zu lösen :-)
  8. Auf den Feldern (1-8,4), (3,1-8), (3,4), (4,3), (5,2), (6,1), (3,4), (2,5), (1,6), (2,3), (1,2), (4,5), (5,6), (6,7) und (7,8) Das hatte mich auf den Ansatz gebracht :-) Danke Dir & viele Grüße Ne0
  9. Hört sich gut an :-) Wie verwirrend er ist, ist mir aufgefallen, als ich ihn geschrieben hatte. Davor war ich mit der korrekten Entzerrung der einzelnen Methoden und Funktionen so sehr beschäftigt, dass es mir nicht einmal auffiel Ich werde "das" auf jedenfall nochmal als übersichtlicheres Struktogramm umschreiben, sodass ich auch selbst einen Durchblick in der Programmierungsphase habe. Danke! Naja, das werd ich dann wohl in der Testphase sehen Solange Du nicht blau anläuftst und dich übergibst ist mir das recht ;-) Hört sich auch gut an. Mich plagt aber das Gefühl, dass ich zwar weiß, was Du mit "linearer Funktion" meinst, aber ich nicht weiß, wie ich das umsetzen soll. Ich kann ja bspw. schlecht für die Horizontale schreiben lineare Funktion: f(x)= mx+b <=> f(x) = b :D Genau das hatte ich vor (ist hoffentlich aus dem Pseudocode ersichtlich) :bimei. Das mit der Heuristik baue ich vielleicht noch ein. Das ist mit dem Bibs von SuM relativ einfach möglich Aber die Felderüberlegung ist mir glaube ich zu weit. Dazu muss ich erst einmal an vielen anderen Stellen ansetzen. Wenn kein Feld mehr gefunden wird, so wird mein Code mit "return false" gestoppt - oder so ähnlich. Zumindest hatte ich in der Überlegungsphase daran gedacht ;) Naja, ich schaue mal, ob und wie ich das die Tage realisieren kann und melde mich ggf. nochmal -wenn ich darf ;-) Viele liebe Grüße & danke Ne0
  10. Guten Tag liebes Forum, Zunächst als Hinweis: Mir ist bekannt, dass das Problem möglicherweise auf Wikipedia behandelt wurde, aber ich möchte gerne selbst zum Ziel kommen ohne "abzuschreiben". Ich stehe vor einem neuen "Problem" mit hoffentlich etwas mehr Wissen. Bei der Umsetzung des s.g. 8-Damen Problems sollen zunächst zwei Ablaufmodelle (Struktogramme) erstellt werden. Das erste soll den Ablauf mit Backtracking beschreiben (natürlich auf das Projekt bezogen), das andere den Algorithmus für die "Kollision","Bedrohung" oder "Berührung" zweier Damen. Das Schachbrett ist 8x8 Felder groß und es sollen acht Damen gesetzt werden. Schön wäre es, wenn mir jemand sagen könnte, ob mein Pseudocode korrekt ist und ob es noch Optimierungen im Performancebereich gibt Da wende ich mich insbesondere an Flashpixx, der mir letztes Mal (teilweise über private Nachrichten) gute Hinweise und Tipps gegeben hat. Zur Problemlösung habe ich mir folgende Gedanken gemacht: Einmalig: int x,y = 1 Methode(a) [Damen setzen]: Solange noch nicht alle acht Damen gesetzt wurden -> rufe Methode( auf Methode( [Damen setzen: durchlaufe das Schachbrett]: 1. Struktogramm: (2te Schleife in erster Schleife) 1. (while-)Schleife: Solange y kleiner gleich 8 1.2. (while-)Schleife: Solange x kleiner gleich 8 1.2.1 if-Abfrage: Dame bedroht? 1.2.1.1 Fall ja (erhält false - s. anderes Struktogramm): x+1 1.2.1.2 Fall nein (erhält true - s. anderes Struktogramm): Dame setzen, return true. 1. y+1, x=1 setzen (eigentliches Backtracking) 1.2.2 if-Abfrage: x,y gleich 8 1.2.2.1 Fall ja: gehe zu Position letzte Dame, lösche letzte Dame, 1.2.2.1.1 if-Abfrage: x kleiner 8 1.2.2.1.1.1 Fall ja: x+1 1.2.2.1.1.2 Fall nein: y+1, x=1 setzen 1.2.2.1.2 Dame setzen 1.2.2.2 Fall nein : rufe Methode rekursiv auf Methode(c) [ist die Dame bedroht?]: [I]Allgemeiner Gedanke:[/I] Fall 1 - Diagonaler Lauf (rechts unten nach oben links): x-y=1 Fall 2 - Diagonaler Lauf (links oben nach rechts unten): x+y=11 Von x,y = 1 ausgehend: Fall 3 - waagerechter Lauf: y festgelegt, x+1 Fall 4 - senkrechter Lauf: x festgelegt, y+1 2. Struktogramm Algorithmus durchlaufen: Methode(d): 1. If-Abfrage für Fälle 1+2 1.1 Fall ja: return false (s. anderes Struktogramm) 1.2 Fall nein: return true (s. anderes Struktogramm) Methode(e): 2. if-Abfrage für Fälle 3+4 1.1 Fall ja: return false (s. anderes Struktogramm) 1.2 Fall nein: 1.2.1 while-Schleife für Fälle 3+4: Solange x/y kleiner 8 1.2.1 x/y++ 1.2.1 rufe Methode(e) rekursiv auf 1.2. return true (s. anderes Struktogramm)[/code] Ich hoffe, dass mir geholfen wird und irgendjemand den Pseudocode durchschaut Viele liebe Grüße & Danke Ne0 PS: Diesmal sind alle Gedanken zum Code von mir - nicht wie letztes Mal ;-)
  11. Alles klar. Da lag mein gedanklicher Fehler. Danke. Allerdings habe ich die Schnittstelle nicht selbst programmiert, sondern quasi vorgelegt bekommen. Aber ich werde meine Lehrerin mal darauf ansprechen. Danke jedenfalls schonmal. Ich werde mit Java generell erst einmal einige Schritte nach hintne machen, wie flashpixx es empfohlen hat. Viele Grüße Ne0Nebul0sa
  12. Die Methode gibts übrigens bereits. Insofern fällt das bei mir weg. Mit der Rückgabe bin ich aber auch nicht so sicher, deshalb auch meine Rückfrage. Alles klar, danke. Doppelt gut. Eigentlich sollte ich solche Dinge doch nach einem Jahr bereits vermittelt bekommen haben, nicht wahr?
  13. Den Teil this.element.compareTo(element) < 0 verstehe ich nicht ganz. Müsste dieser nicht genau anders herum sein? Denn bisher wird verglichen, ob das aktuelle Element verglichen mit dem anderen Element kleiner 0 ist? Die Methode "sortiere" wird höchstwahrscheinlich den Baum anhand eines Algorithmus sortieren, nicht wahr? Ist interessanterweise eine Musterlösung. Aber danke für den Hinweis. Verstehe ich noch nicht ganz (aufgrund der Wortwahl), davon wird aber auch erst später Gebrauchst gemacht - zumindest ist hiervon noch keine Rede im Lehrbuch. Danke. Naheliegend. Okay, danke - Darf ich fragen, weswegen Du den Gedanken angebracht hast?
  14. Nichts anderes hab ich behauptet ;-) Ferner kann ich die Fehlermeldung interpretieren (s. Begründungen bei den einzelnen Fehlern); doch hin und wieder fehlen mir die Lösungswege - die Lösungsansätze sind vorhanden. Ich dachte hier eigentlich neben der Hilfe auch konstruktive Kritik zu erhalten. Anfangs hattest Du diese auch noch gegeben, aber Aussagen wie sind meiner Aufassung nach weder konstruktiv noch hilfreich und rein persönlich bezogen (wenn auch wie in diesem Fall nicht allzu dramatisch). Zu Bewerten wie weit und wie intensiv ich etwas erlerne, liegt, finde ich, nicht in der Relevanz für die Frage. Solche Aussagen helfen niemand weiter und je drastischer die Formulierung, desto sinnloser die Aussage. Nun zu argumentieren ich könnne keine Kritik vertragen wäre ebenso nicht nachvollziehbar. Ich habe mehrmals unterstreicht, dass ich meine Fehler versuchen werde zu beheben und darum gebeten, wenn auch indirekt, dass sich jeder dessen bewusst sein sollte. Umso trauriger finde ich es, wenn sich ein Moderator - seines Ranges und der damit verbundenden Verantwortung bewusst - dann dazu äußert. Wenn ich deinen oder den allgemeinen Anforderungen nicht genüge, dann ist das leider meine Schwäche. Ich möchte hier keinen Konflikt anzetteln, aber da sicherlich viele hobbymäßig im Forum unterwegs sind (und möglicherweise beruflich programmieren), erhoffe ich einen gewissen Spaßfaktor bei der Sache. Ich möchte darauf aber auch nicht zu sehr herumreiten. Deine Kritik, sofern konstruktiv, ist angebracht und berechtigt. Um einmal die Katze aus dem Sack zu lassen: Ich habe nach dem Programm online gesucht, da es Teil der schulbezogenen Programmierung ist und ich ferner nicht der erste sein sollte, der sich damit befasst hat. So habe ich hier ein Beispiel gefunden, das Programm kopiert und auf meine Bibliothek angepasst. Insofern ist meine Aussage so gesehen nicht korrekt. Ich habe den Code lediglich modifiziert. ..aus Faulheit und teilweise nicht vorhandenen Wissen (deshalb auch die berechtigte Kritik). Zudem habe ich manchmal das Gefühl, dass Du meine Antworten nicht richtig liest, denn: habe ich bereits angeführt mit: Der Satz war ein Zusatz um die Atmosphäre ein wenig zu lockern - daher auch der Smiley. Nachdem ich weiter oben bereits gesagt hatte, warum der Code so aufgebaut ist, hat sich diese Frage auch geklärt: Was ich noch anführen wollte ist folgendes: Was vollkommen korrekt ist. Ich hatte den Satz auch nur als einen Hinweis - Tipp angeführt. Ich hatte gehofft damit ein Signal versendet zu haben. Denn auch wenn Deine Kritik (größtenteils) angebracht ist, so wirkst Du für mich leider ein bischen "hochnäsig" oder vorsichtiger wie ein "Mann des leichten Wortes", was ich persönlich sehr schade finde, denn meiner Meinung nach ist der Moderator (und der Administrator, bzw. die leitende Gruppe) das Vorbild für jedes Mitglied. Auch wenn ich rein fachlich nicht beurteilen kann, ob Du Recht hast, so war es nicht in der Aufgabenstellung gefordert. Weder direkt noch indirekt. Die Schnittstelle (Interface) sollten wir uns allerdings sehr wohl anschauen - was meiner Ansicht nach der von Dir angsprochene Punkt ("Comparable-Schnittstelle") entspricht? Rein gedanklich habe ich mir inzwischen folgendes überlegt: Zunächst wird abgefragt, ob der Baum leer ist, um einen möglichen NullPointer zu vermeiden. Falls ja: Es wird ein neuer Baum erzeugt. Falls nein: Überprüfe, ob Teilbäume existieren (bzw. nicht leer sind). Nun wird gefragt, ob die vorliegende Visitenkarte größerAls die im Baum liegende Visitenkarte (Ordnungsobjekt) ist. Falls nein & nicht gleich der aktuellen & und das Blatt nicht gleich null: linker Teilbaum. Falls nein & gleich der aktuellen: Methode gleichWie aufrufen. Falls ja und das Blatt nicht gleich null: gehen einen Schritt in den rechten Teilbaum. --Falls das Blatt gleich null & nicht gleich der akteullen Karte: lege Karte ab und lösche aktuelle Visitenkarte aus der Liste. (gilt sowohl für den rechtenTB als auch für den linkenTB). Methode GleichWie: lösche Karte. (,da sonst doppelt existent) Falls wir am Ende sind (keine Visitenkarte mehr vorhanden): Programm durchgelaufen. Ende. Nun gut. Lediglich ein paar Gedanken für das Programm. Die Methoden "istGleichWie", "istGroesserAls" und "istKleinerAls" kann ich ja mit Hilfe der Schnittstelle benutzen. Verbesserungsvorschläge gerne gesehen :cool: Viele Grüße Ne0Nebul0sa
  15. Vielleicht solltest Du nicht vergessen, dass ich mich noch in der Lernphase befinde und das Visitenkartenprojekt eher effektiv als effizient arbeiten sollte. Das heißt, dass das Programm erst einmal nur laufen muss und später keinen kommerziellen Schwerpunkt hat sondern rein aufgrund des Wunsches zu Lernen entstanden ist. Insofern darf der Code auch ruhig ein wenig wilder ausfallen. Gleichwohl hast Du natürlich Recht, wenn die Grundsätze bereits falsch gelernt werden, überträgt sich das ganze später im beruflichen Leben - aber dann kann ich immernoch meine Lehrerin verantwortlich machen :bimei Letztlich ist meine Umsetzung auch nur eine Reflektion der Qualität des Unterrrichts, falls ich einem durchschnittlichen Schüler entspreche, und das kann ich bei der Betrachtung der Qualitäten meines Kurses mit einiger Sicherheit sagen :upps. Ich werde mir deine Kritik zu Herzen nehmen und mir in Ruhe nochmal die angesprochenen Bereiche anschauen. Wie dem auch sei. Mein Programm sollte eigentlich nur funktionieren, und auch wenn ich konstruktive Kritik schätze und sicherlich angebracht ist, hatte ich mir doch einen Lösungsweg bis zum Ziel erhofft, wie bspw. angestrebt durch den User "Aliter". Danke rechtherzlich dafür. Vielleicht finde ich ja mit den neuen Erkenntnissen einen Weg. Defakto ist, dass ich selbst noch lerne und viele Dinge noch nicht kenne. Zumal Java meine erste Progammiersprache ist, die ich aktiv erlerne und seit ca. einem Jahr durch die Schule vermittelt bekomme. Insofern - nobody's perfect. Ich wette noch nicht mal Du ;-) Viele Grüße Ne0Nebul0sa

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...