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
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
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?
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.
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden