benetg001 Geschrieben 18. Februar 2016 Teilen Geschrieben 18. Februar 2016 Hallo liebe Community, ich schreibe im Fach Informatik eine Facharbeit zum Thema "Grenzen von PCs in der theoretischen Informatik". Ich habe versucht das Collatz- Problem in BlueJ zu implementieren, habe das auch geschafft, jedoch steh ich nun vor dem Problem, dass wenn ich in der Oberfläche eine Zahl errechnen lasse, nur das letzte Ergebnis der Rechnung angezeigt wird. Ich bräuchte das Programm jedoch so, dass alle Ergebnisse untereinander aufgereiht sind. Hier der Quellcode: import sum.komponenten.*; import sum.werkzeuge.*; import sum.ereignis.*; public class Collatz extends EBAnwendung { // Objekte private Etikett hatEtikettEingabe; private Knopf hatKnopfBerechnen; private Zeichenbereich hatZeichenbereich1; private Textfeld hatTextfeld1; private Etikett hatEtikettErgebnisse; // Attribute /** * Konstruktor */ public Collatz() { //Initialisierung der Oberklasse super(1075, 660); hatEtikettEingabe = new Etikett(133, 147, 100, 25, "Eingabe:"); // Ausrichtung hatEtikettEingabe.setzeAusrichtung(Ausrichtung.MITTE); hatKnopfBerechnen = new Knopf(244, 183, 100, 25, "Berechnen"); hatKnopfBerechnen.setzeBearbeiterGeklickt("hatKnopfBerechnenGeklickt"); hatZeichenbereich1 = new Zeichenbereich(366, 148, 100, 100, ""); hatTextfeld1 = new Textfeld(246, 147, 100, 25, ""); // Ausrichtung hatTextfeld1.setzeAusrichtung(Ausrichtung.LINKS); hatEtikettErgebnisse = new Etikett(367, 115, 100, 25, "Ergebnisse"); // Ausrichtung hatEtikettErgebnisse.setzeAusrichtung(Ausrichtung.MITTE); } /** * Vorher: Ereignis GeklicktvonhatKnopfBerechnen fand statt. * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird) */ public void hatKnopfBerechnenGeklickt() { // Schreiben Sie hier den Text ihres Dienstes hatZeichenbereich1.setzeInhalt(this.collatz(hatTextfeld1.inhaltAlsGanzeZahl())); } public int collatz(int pZahl) { while(pZahl>1) { if(pZahl%2 == 0) { pZahl = pZahl/2; } else{ pZahl = 3*pZahl+1; } hatZeichenbereich1.setzeInhalt(pZahl); } return pZahl; } } Wäre echt dankbar wenn mir jemand helfen könnte! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 18. Februar 2016 Teilen Geschrieben 18. Februar 2016 meinst du Collatz-Problem? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 18. Februar 2016 Teilen Geschrieben 18. Februar 2016 Vermutlich musst du innerhalb der while-Schleife das Zwischenergebnis nicht in den Inalt des Zeichenbereichs setzen, sondern an diesen anhängen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
benetg001 Geschrieben 18. Februar 2016 Autor Teilen Geschrieben 18. Februar 2016 vor 27 Minuten schrieb MartinSt: Vermutlich musst du innerhalb der while-Schleife das Zwischenergebnis nicht in den Inalt des Zeichenbereichs setzen, sondern an diesen anhängen Ok aber wie kriege ich das hin? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 19. Februar 2016 Teilen Geschrieben 19. Februar 2016 Ich habe keine Ahnung von BlueJ, aber dein Zeichenbereich sollte doch eine Getter-Methode haben, die Dir den bisherigen Inhalt zurück gibt. An diesen hängst Du halt den neuen Wert an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 19. Februar 2016 Teilen Geschrieben 19. Februar 2016 Außerdem ist deine While-Bedingung nicht korrekt while(pZahl>1). Alle bisher bekannten Folgen enden ja in einem Zyklus des Tripels {4,2,1}; deine Variante bricht aber bei 2 ab. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 19. Februar 2016 Teilen Geschrieben 19. Februar 2016 Noch 2 Anmerkungen, die nicht direkt Deine eigentliche Frage betreffen: Wenn dein Programm eine bisher unbekannte Lösung des Collatz-Problems findet, dann geht das Programm in einer Endlosschleife. Da es sich um eine Zahlenfolge handelt, liegt eigentlich nahe, das Ganze über eine Rekursion zu implementieren. Gruß Martin 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.