benetg001 Geschrieben 18. Februar 2016 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
MartinSt Geschrieben 18. Februar 2016 Geschrieben 18. Februar 2016 meinst du Collatz-Problem? Zitieren
MartinSt Geschrieben 18. Februar 2016 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
benetg001 Geschrieben 18. Februar 2016 Autor 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
MartinSt Geschrieben 19. Februar 2016 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
MartinSt Geschrieben 19. Februar 2016 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
MartinSt Geschrieben 19. Februar 2016 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
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.