BlueJ Potenz Berechnung

Blav

Mitglied
Guten Tag,
ich versuche gerade mit meinen Aufzeichnungen aus dem Unterricht einen Potenz Rechner mit BlueJ zu erstellen. Zuerst einmal die Aufzeichnungen des Codes:

Java:
if (n == 1) return x;
else (n = "gerade") return Quadrat (f (x,n div 2));
else return x-f(x, n-1);
}
}

In BlueJ habe ich bereits folgendes, und die Aufzeichnungen übertragen.
Java:
public class SuMAnwendung extends EBAnwendung
{
    // Objekte
    private Etikett hatEtikettPotenzRechner;
    private Etikett hatEtikettX;
    private Etikett hatEtikettN;
    private Textfeld hatTextfeld1;
    private Textfeld hatTextfeld2;
    private Etikett hatEtikettFxNErgebnis;
    private Etikett hatEtikettF52525;
    private Knopf hatKnopfBerechnePotenz;
    private Knopf hatKnopfBeenden;
    
    double x;
    double n;
...
Java:
 public void hatKnopfBerechnePotenzGeklickt()
    {
        if (n == 1)  return x;
        else (n = "gerade") return Quadrat (f(x,n div2));
        else return x-f(x,n-1)
    }

Durch das double konnte ich zumindest schonmal die Variable n einbinden, mit x hat es leider nicht geklappt. Nun habe ich bei diesem Programm einige Probleme, wo ich hoffe, dass ihr mir evtl. weiterhelfen könntet.

1. Folgender Schritt soll nur getätigt werden, wenn n =1 ist, und nur dann.
Java:
        else (n = "gerade") reutrn Quadrat (f(x,n div2));
Leider bin ich hier ratlos wie ich das "gerade" ersetzen kann. Habe schon ein wenig versucht im Internet etwas zu finden und dort stand ein Ansatz mit 1 == 1, welchen ich allerdings nicht recht verstanden habe, da es dort ja um die Übereinstimmung bzw. Gleichsetzung der Variable 1 geht, und somit keien gerade Zahl / Variable erkennen oder darstellen würde.

2. Mein zweites Problem ist das Quadrat welches in der Formel steht. Ich denke nicht das es so stehen bleiben kann, und weiß zugegeben nicht genau wie ich das Quadrat ersetzen soll, bzw. wie es wirklich gemeint ist.

Es wäre toll wenn mir jemand einen Tipp geben könnte. Jeder Tipp hilft mir weiter :)


PS: Wollte es via Programmgenerator erstellen, damit ich bei x und n Variablen einsetzen kann. Dieser Schritt dürfte allerdings nicht allzu schwer werden, und den werde ich noch nachträglich hinzufügen, sobald der Hauptteil funktioniert.
 

ssoul26

Bekanntes Mitglied
Gerade bedeutet doch immer durch zwei teilbar, ausser 0 versteht sich von selbst. das gerade kannst herausfinden wenn du ein Modulo 2 machst -> wenn zahl modulo 2 gleich 0 ergibt, ist die zahl gerade
 

Blav

Mitglied
Mit Quadrat meintest du sicherlich den Wert zum Quadrat - also "hoch 2"
helfen könnte die Klasse Math siehe hier Galileo Computing :: Java ist auch eine Insel - 18 Bits und Bytes und Mathematisches)

Java:
Math.pow( f (x,n div 2), 2)

oder einfach

Java:
(f (x,n div 2)) * (f (x,n div 2))
Vielen Dank das hat mir schonmal sehr weiter geholfen!
Allerdings habe ich in dieser Zeile erneut ein Problem, so sieht die Zeile bisher aus:
Java:
        else (n % 2 == 0) return (f (x,n div 2)) * (f (x,n div 2));
Und folgender Fehler kommt:
Code:
not a statement


Gruß
 

MrClave

Bekanntes Mitglied
Vielen Dank das hat mir schonmal sehr weiter geholfen!
Allerdings habe ich in dieser Zeile erneut ein Problem, so sieht die Zeile bisher aus:
Java:
        else (n % 2 == 0) return (f (x,n div 2)) * (f (x,n div 2));
Und folgender Fehler kommt:
Code:
not a statement


Gruß

Hast du das so 1 zu 1 im Code stehen ?

Wenn ja, dann musst du statt
Code:
else
-
Code:
else if ( Bedingung )
schreiben.
Ein
Code:
else
enthält nämlich keine definierten Bedinungen, da es all das abdeckt, was das
Code:
if / else if
nicht abdecken konnte.

Mit dieser Rechnung kann der Compiler auch nicht viel anfangen. Der weiß ja nicht, was man z.B. mit
Code:
x,n
oder
Code:
f(....)
machen soll
Sprich, du brauchst weitere Rechenzeichen.
Java:
(f (x,n div 2)) * (f (x,n div 2))

Und ich würde die Math.pow Funktion nutzen, wenn sie einem schon zur Verfügung steht.
 
Zuletzt bearbeitet:

Blav

Mitglied
Vielen Dank für eure Antworten, habe das meiste mal mit in meinem Qulltext verarbeitet, schaut nun so aus:
Java:
if (n == 1)  return x;
         else if ((n % 2) == 0) return (f (x,n div 2)) * (f (x,n div 2));
        else return x-f(x,n-1)

Der Fehler mit dem "not a statement" ist leider immer noch vorhanden.

Den Math Befehl würde ich gerne nehmen, bestreite auch nicht das dieser schlecht sei etc. pp. , leider hatten wir diesen Befehl noch nicht im Umgang mit BlueJ & Java, deswegen würde ich ihn gerne vermeiden, da wir möglichst eine Lösung mit unserem Wissenstand finden sollen.

Alles andere was bereits gepostet wurde habe ich verstanden und wurde so auch schon durchgenommen.

X, N werde ich auch noch zuweisen.
Muss ich gleich mal schauen ob ich es auf anhieb schaffe, Planung ist wie folgt:



So sieht das ganze Programm aus, mit Beispiel für x und n. Da x und n in einem Textfeld sind, müsste ich mit dem Befehl hatTextfeld1 (x) und hatTextfeld2 (n) arbeiten.

Sprich:
Java:
double hatTextfeld1 = x;
Java:
double hatTextfeld2 = n;

e: Das mit TextFeld1 funktioniert leider nicht, da hatTextfeld1 schonmal deklariert wurde (unten - Textbox). Dann also so:
Java:
double x;
    double n;

    double Textfeld1 = x;
    double Textfeld2 = n;
gruß
 
Zuletzt bearbeitet:

MrClave

Bekanntes Mitglied
Ihr hattet schon eigene Methoden und Fenster Darstellung, aber noch nichts über die Math Klasse ?
Oder versteh' ich das gerade verkehrt ? ^^

Deine Berechnungen sind aber leider immer noch nicht richtig.

Bei
Code:
(f (x,n div 2))
musst du dem Compiler erzählen, was er mit den Zahlen machen soll.
Es müsste schon
Code:
(f * ( .... ))
sein, damit der Compiler weiß, wie gerechnet werden soll.

Und was ist eigentlich dieses "div 2" ? Meinst du "/2" oder ist das eine Variable ?
Hab' noch nicht wirklich den Durchblick bei deinem Programm. (Bin selbst Anfänger)

Und dir fehlt auch ein Semikolon beim else.

Falls ich dein Problem grundlegend falsch verstanden habe, muss ich mich entschuldigen.
Hatte leider erst 2 Stunden über Methoden, daher kann ich da nicht all zu viel zu sagen.
 

Blav

Mitglied
Ihr hattet schon eigene Methoden und Fenster Darstellung, aber noch nichts über die Math Klasse ?
Oder versteh' ich das gerade verkehrt ? ^^

Deine Berechnungen sind aber leider immer noch nicht richtig.

Bei
Code:
(f (x,n div 2))
musst du dem Compiler erzählen, was er mit den Zahlen machen soll.
Es müsste schon
Code:
(f * ( .... ))
sein, damit der Compiler weiß, wie gerechnet werden soll.

Und was ist eigentlich dieses "div 2" ? Meinst du "/2" oder ist das eine Variable ?
Hab' noch nicht wirklich den Durchblick bei deinem Programm. (Bin selbst Anfänger)

Und dir fehlt auch ein Semikolon beim else.

Falls ich dein Problem grundlegend falsch verstanden habe, muss ich mich entschuldigen.
Hatte leider erst 2 Stunden über Methoden, daher kann ich da nicht all zu viel zu sagen.
Ja das siehst du richtig. Wir hatten den Programmgenerator bereits im letzten Jahr, Math Method hatten wir noch nicht und habe ich heute zum ersten mal gehört^^

Das mit dem Div 2 ist noch eine weitere Sache wo ich selber auch noch grübel, da uns das nicht wirklich erklärt wurde. Ich gehe mal davon aus das es / oder - bedeuten soll. Sprich dividieren oder subtrahieren.

PS:
Zeile sieht nun so aus (Div ist noch drin, da das Programm diese Variable derzeit annimmt.
Java:
        else if ((n % 2) == 0) return (f * (x,n div 2)) * (f * (x,n div 2));

Gruß
 

Blav

Mitglied
Da ich meinen letzten Post leider nicht editieren kann schreibe ich es nochmals hier rein,da mein letzter Post etwas undeutlich war.
Zeile sind momentan wie folgt aus:
Java:
        else if ((n % 2) == 0) return (f * (x,n - 2)) * (f * (x,n - 2));

Fehlermeldung
')' expected

Fehler wird an folgender Stelle angezeigt:
Java:
        else if ((n % 2) == 0) return (f * (x <=Fehlermeldung wird hier angezeigt ,n - 2)) * (f * (x,n - 2));
 

MrClave

Bekanntes Mitglied
Das Komma ist verkehrt, nehme ich mal stark an.
Komma ist kein Rechenzeichen, daher kann der Compiler damit so nichts anfangen.

Das Komma musst du durch ein Rechenzeichen ersetzen.
 

Blav

Mitglied
Das Komma ist verkehrt, nehme ich mal stark an.
Komma ist kein Rechenzeichen, daher kann der Compiler damit so nichts anfangen.

Das Komma musst du durch ein Rechenzeichen ersetzen.

Danke für die Antwort, rein logisch kann ich dieser auch folgen.
Hier soll da ausgedrückt werden, x und / oder n, dieses wird durch ein Komma abgetrennt. Ein Rechenzeichen würde die Formel ja wieder komplett verändern, und die Fehlermeldung bezieht sich ja auch auf eine Klammer :/

e:
Habe es zum Test mal so abgeändert (auch wenn die Zeichnen nun falsch sind):
Java:
        else if ((n % 2) == 0) return (f * (x && n - 2)) * (f * (x && n - 2));

Funktioniert soweit, wenn es nicht das && wäre, da dies für Probleme sorgt.

Weiß evtl. jemand weiter wie man das Komma ersetzen könnte?
 
Zuletzt bearbeitet:

MrClave

Bekanntes Mitglied
Die Klammern sind richtig. Die öffnest 2, und schließt diese auch wieder. Die Meldung wird wegen dem Komma zustande gekommen sein.

Ich denke, dass ich so langsam dein Programm verstehe.
Könntest du aber mal deinen KOMPLETTEN Code posten ?

Dann könnte ich mir einen besseren Überblick verschaffen.
Denke, dass ich dir das Problem dann lösen kann.
Wie gesagt, bin auch noch Anfänger und noch nicht geübt im Überprüfen anderer Codes^^
 

Blav

Mitglied
Ob du es glaubst oder nicht, das war eigentlich der ganze Code :)
Habe aber nochmal ein wenig recherchiert und bin auf eine andere Lösung gekommen, bzw. andere Struktur:
Java:
 public double hatKnopfBerechnePotenzGeklickt(int basis, int exponent)
    {
        double potenz =1;
        if (exponent >=0)
        {
            for (int i=1;i<= exponent; i++);
            {
                potenz = potenz*basis;
            }
        }
        else
        {
            for (int i=1; i<= -exponent; i++)
            {
                potenz = potenz/basis;
            }
        }
        return potenz;
    }
    }

Dürfte so eigentlich funktionieren. Keine Syntax error, jetzt muss ich es nur nochmal mit dem Textfeld einstellen, das dort das Ergebnis angezeigt wird.

edit:
So hier jetzt der komplette Quellcode:
Java:
/**
 * Die Klasse SuMAnwendung wurde automatisch erstellt: 
 * 
 * @author 
 * @version 27.10.2012
 */

import sum.komponenten.*;
import sum.werkzeuge.*;
import sum.ereignis.*;


public class SuMAnwendung extends EBAnwendung
{
    // Objekte
    private Knopf hatKnopfBerechnen;
    private Knopf hatKnopfBeenden;
    private Textfeld hatTextfeld1;
    private Etikett hatEtikettX;
    private Etikett hatEtikettN;
    private Textfeld hatTextfeld2;
    private Textfeld hatTextfeld3;
    private Etikett hatEtikettErgebnis;

    // Attribute
    
 

/**
 * Konstruktor
 */
    public SuMAnwendung()
    {
        //Initialisierung der Oberklasse
        super(1459, 950);

        hatKnopfBerechnen = new Knopf(23, 166, 100, 25, "Berechnen");
        hatKnopfBerechnen.setzeBearbeiterGeklickt("hatKnopfBerechnenGeklickt");
        hatKnopfBeenden = new Knopf(201, 166, 100, 25, "Beenden");
        hatKnopfBeenden.setzeBearbeiterGeklickt("hatKnopfBeendenGeklickt");
        hatTextfeld1 = new Textfeld(172, 89, 130, 25, "");
        // Ausrichtung
        hatTextfeld1.setzeAusrichtung(Ausrichtung.LINKS);
        hatEtikettX = new Etikett(23, 58, 100, 25, "x =");
        // Ausrichtung
        hatEtikettX.setzeAusrichtung(Ausrichtung.LINKS);
        hatEtikettN = new Etikett(23, 89, 100, 25, "n =");
        // Ausrichtung
        hatEtikettN.setzeAusrichtung(Ausrichtung.LINKS);
        hatTextfeld2 = new Textfeld(172, 57, 130, 26, "");
        // Ausrichtung
        hatTextfeld2.setzeAusrichtung(Ausrichtung.LINKS);
        hatTextfeld3 = new Textfeld(172, 120, 130, 25, "");
        // Ausrichtung
        hatTextfeld3.setzeAusrichtung(Ausrichtung.LINKS);
        hatEtikettErgebnis = new Etikett(23, 120, 100, 25, "Ergebnis");
        // Ausrichtung
        hatEtikettErgebnis.setzeAusrichtung(Ausrichtung.LINKS);
    }

/**
 * Vorher: Ereignis GeklicktvonhatKnopfBerechnen fand statt.
 * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
 */
public double hatKnopfBerechnePotenzGeklickt(int basis, int exponent)
    {
   
        double potenz =1;
        if (exponent >=0)
        {
            for (int i=1;i<= exponent; i++);
            {
                potenz = potenz*basis;
            }
        }
        else
        {
            for (int i=1; i<= -exponent; i++)
            {
                potenz = potenz/basis;
            }
        }
        return potenz;
    }
    
    

/**
 * Vorher: Ereignis GeklicktvonhatKnopfBeenden fand statt.
 * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
 */
    public void hatKnopfBeendenGeklickt()
    {
    this.beenden();
}

}
Nun fehlt mir nur noch, dass x und n über die Textbox erkannt werden, und das das Ergebnis in Textbox 3 ausgegeben wird. Könnte mir dort evtl. nochmal jemand Tipps geben?

Gruß

So nochmal eben editieren:
Java:
        potenz = hatTextfeld1.inhaltAlsZahl();
Deklariert die potenz nun, dass sie im Testfeld1 steht, für die Basis habe ich es leider nicht hinbekommen, ebenso habe ich es nicht geschafft Textbox3 für das Ergebnis zu deklarieren, was ich also noch benötige:
Textfeld2 = basis
Textfeld3 = Ergebnis

Könnte mir da jemand weiter helfen?
Gruß
 
Zuletzt bearbeitet:

Blav

Mitglied
Hallo,
mal ein kleines Update.

Kompletter Quellcode:
Java:
/**
 * Die Klasse SuMAnwendung wurde automatisch erstellt: 
 * 
 * @author 
 * @version 27.10.2012
 */

import sum.komponenten.*;
import sum.werkzeuge.*;
import sum.ereignis.*;


public class SuMAnwendung extends EBAnwendung
{
    // Objekte
    private Knopf hatKnopfBerechnen;
    private Knopf hatKnopfBeenden;
    private Textfeld hatTextfeld1;
    private Etikett hatEtikettX;
    private Etikett hatEtikettN;
    private Textfeld hatTextfeld2;
    private Textfeld hatTextfeld3;
    private Etikett hatEtikettErgebnis;

    // Attribute
    
    

/**
 * Konstruktor
 */
    public SuMAnwendung()
    {
        //Initialisierung der Oberklasse
        super(1459, 950);

        hatKnopfBerechnen = new Knopf(23, 166, 100, 25, "Berechnen");
        hatKnopfBerechnen.setzeBearbeiterGeklickt("hatKnopfBerechnenGeklickt");
        hatKnopfBeenden = new Knopf(201, 166, 100, 25, "Beenden");
        hatKnopfBeenden.setzeBearbeiterGeklickt("hatKnopfBeendenGeklickt");
        hatTextfeld1 = new Textfeld(172, 89, 130, 25, "");
        // Ausrichtung
        hatTextfeld1.setzeAusrichtung(Ausrichtung.LINKS);
        hatEtikettX = new Etikett(23, 58, 100, 25, "x =");
        // Ausrichtung
        hatEtikettX.setzeAusrichtung(Ausrichtung.LINKS);
        hatEtikettN = new Etikett(23, 89, 100, 25, "n =");
        // Ausrichtung
        hatEtikettN.setzeAusrichtung(Ausrichtung.LINKS);
        hatTextfeld2 = new Textfeld(172, 57, 130, 26, "");
        // Ausrichtung
        hatTextfeld2.setzeAusrichtung(Ausrichtung.LINKS);
        hatTextfeld3 = new Textfeld(172, 120, 130, 25, "");
        // Ausrichtung
        hatTextfeld3.setzeAusrichtung(Ausrichtung.LINKS);
        hatEtikettErgebnis = new Etikett(23, 120, 100, 25, "Ergebnis");
        // Ausrichtung
        hatEtikettErgebnis.setzeAusrichtung(Ausrichtung.LINKS);
    }

/**
 * Vorher: Ereignis GeklicktvonhatKnopfBerechnen fand statt.
 * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
 */
public double hatKnopfBerechnenGeklickt(double basis, int exponent)
    {
   
        double potenz =1;
        hatTextfeld3.inhaltAlsZahl();
        potenz = hatTextfeld1.inhaltAlsZahl(); //Potenz = n = Textfeld1
        basis = hatTextfeld2.inhaltAlsZahl(); //Basis = x = Textfeld 2


        if (exponent >=0)
        {
            for (int i=1;i<= exponent; i++);
            {
                potenz = potenz*basis;
            }
        }
        else
        {
            for (int i=1; i<= -exponent; i++)
            {
                potenz = potenz/basis;
            }
        }
        return potenz;
    }
    
    

/**
 * Vorher: Ereignis GeklicktvonhatKnopfBeenden fand statt.
 * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
 */
    public void hatKnopfBeendenGeklickt()
    {
    this.beenden();
}

}

//inhaltAlsZahlGeklickt




Neuer Teilcode [Textbox]:
Java:
hatTextfeld3.inhaltAlsZahl();
potenz = hatTextfeld1.inhaltAlsZahl(); //Potenz = n = Textfeld1
basis = hatTextfeld2.inhaltAlsZahl(); //Basis = x = Textfeld 2

[STRIKE]Funktioniert soweit beim übersetzen, weiß zufällig jemand wie ich es jetzt schreiben muss, dass das Ergebnis in Textbox 3 angezeigt wird?
[/STRIKE]

So Textbox3 dürfte jetzt funktionieren, nun habe ich leider folgendes Problem, wenn ich auf den Button Berechnen klicke:
Code:
Fehler: Methode "hatKnopfBerechnenGeklickt" von Knopf "Berechnen" nicht gefunden.
Wie kann man dieses Problem beheben?
PS: Ergebnis wird leider auch nicht angezeigt.
Gruß
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
G ganzzahlige Potenz schnell berechnen Allgemeine Java-Themen 4
pkm Berechnung der Fakultät von Fließkommazahlen anhand von Stirlingformel Allgemeine Java-Themen 4
I Berechnung Lagerbestands / Verfügbarkeitsprüfung Allgemeine Java-Themen 1
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
D Berechnung des Cosinus Allgemeine Java-Themen 4
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
A Fehlerhafte Nst Berechnung einer bestimmten Fkt. (Bisektion) Allgemeine Java-Themen 10
E Berechnung des Schnittpunktes von zwei Geraden Allgemeine Java-Themen 1
P Performate Zeiteiteiteilungs- Berechnung Allgemeine Java-Themen 4
B TileMap berechnung? Allgemeine Java-Themen 8
P jodaTime Berechnung Geburtstag Allgemeine Java-Themen 1
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
M Berechnung verbessern Allgemeine Java-Themen 8
W OOP Berechnung des Skalarprodukts Allgemeine Java-Themen 9
H Demonstrationsprogramm zur CRC-Berechnung Allgemeine Java-Themen 2
D Berechnung von Sonnenauf und Sonnenuntergang Allgemeine Java-Themen 2
E Berechnung in Arraylist Allgemeine Java-Themen 10
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
E Falsche Ergebnisse bei PQ-Formel Berechnung Allgemeine Java-Themen 12
N Optimierung einer Berechnung Allgemeine Java-Themen 17
G java.sql Time Berechnung Allgemeine Java-Themen 6
Eldorado Berechnung von Koordinaten, die zufällig aussehen Allgemeine Java-Themen 5
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
J Berechnung anhand einer XML-Datei Allgemeine Java-Themen 3
Private Void rekursive vs. iterative Lösung für Berechnung der Fakultät Allgemeine Java-Themen 12
S YUV to RGB (einfache Berechnung) Allgemeine Java-Themen 5
G Programm zur Berechnung von Summe, Median, Erwartungswert, usw von einem Array Allgemeine Java-Themen 7
C Bilder rotieren, Denkfehler in der Berechnung? Allgemeine Java-Themen 2
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
T Berechnung in zweidimensionalem Array Allgemeine Java-Themen 3
X hashCode() Berechnung Allgemeine Java-Themen 5
R Tabelle - Berechnung der "Zeilenart" Allgemeine Java-Themen 2
L Berechnung mit Module bis bes.timme Zahl erreicht. Allgemeine Java-Themen 4
P CRC Berechnung Allgemeine Java-Themen 2
J berechnung von potenzen und wurzel-ziehen ohne klasse " Allgemeine Java-Themen 14
D Problem bei einer Berechnung (pow?) Allgemeine Java-Themen 3
P Java-Programm zur Berechnung globaler Minimas und Maximas-ff Allgemeine Java-Themen 4
B Primzahlen Berechnung optimieren Allgemeine Java-Themen 7
A Probleme bei der Berechnung von Pi! Java Problem Allgemeine Java-Themen 2
M Servlet --> Berechnung --> Timeout vom Proxy oder IE!? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben