Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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
 
 

 

Geschrieben

 

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?

Geschrieben

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.

Geschrieben

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.

Geschrieben

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...