Arithmetische Operatoren

MacMurdock

Aktives Mitglied
Hallo!
ich habe die aufgabe bekommen einige arithmetische Ausdrücke auszuwerten.
Leider funktioniert das bei mir nicht ganz ich habe mehrere Ausdrücke bekommen, wobei i, k, m und n über den konstruktor definiert werden müssen.
Ein AUsdrucke ist zum beispiel: k - i * 7 + 13 (summe1 im code).
Wenn ich diesen AUsdruck schriftlich nach der java präzedenz ausrechne ist das Ergebniss1. Wenn ichs per code durchrechnen lasse kommt komischerweisse immer 13 raus... was mache ich falsch?
hier noch der code:

Java:
public class Ausdruecke
{
    // Einige Instanzvariablen, die zur Benutzung in Ausdrücken zur Verfügung stehen.
    private int i;
    private int k;
    private int m;
    private int n;

    /**
     * Konstruktor für Objekte der Klasse Ausdrücke
     */
    public Ausdruecke()
    {
        int i = 4;
        int k = 14;
        int m = 3;
        int n = 2;
    }

    /**
     * Eine Beispiel-Methode, die einen Ausdruck auswertet und das Ergebnis ausgibt.
     */
    public void summe()
    {
        int summe;
        summe = 5 + 9; // Summe berechnen
        // und ausgeben
        System.out.println("5 + 9 = " + summe);
    }
   
    public void summe1()
    {
        int summe1;
        summe1 = k - i * 7 + 13;
        
        System.out.println("k - i * 7 + 13 = " + summe1);
    }
}
 
Lasse mal das
Code:
int
jeweils vor den Variablen im Konstruktor weg!
Du definierst so nämlich neue, lokale Variablen die mit den Instanzvariablen nichts zu tun haben!
 
Lasse mal das
Code:
int
jeweils vor den Variablen im Konstruktor weg!
Du definierst so nämlich neue, lokale Variablen die mit den Instanzvariablen nichts zu tun haben!


Danke, die rechung funktioniert jetzt!
Allerdings hab ich jetzt ein anderes Problem ich habe eine weitere "modulo" Berechnung hinzugefügt und nun erscheint eine seltsame Fehlermeldung im Ausgabefesnter, die ich noch nie gesehen habe.
Im Quellcode werden keine fehler angezigt! ich häng mal nen screenshot mit an.

unbenanntux.jpg
 
bei
Code:
x % 0
fliegt eine devision by zero exception.
Was soll da auch als Rest übrig bleiben? 😉
 
m wird wohl 0 sein. Überprüfe das! Du hast jedenfalls irgendwo (schau in die Zeile die dir die Exception angibt) eine Division durch 0. (was Modulo genau macht weisst du? )
 
m wird wohl 0 sein. Überprüfe das! Du hast jedenfalls irgendwo (schau in die Zeile die dir die Exception angibt) eine Division durch 0. (was Modulo genau macht weisst du? )



Ja, ich weiss was modulo macht und ich habe auch keine division durch 0. m ist 3 und k ist 14.
Die Zeile, die die expection angibt(49) sieht so aus : summeiv = k % m;
Hier nochmal der code:

Java:
public class Ausdruecke
{
    // Einige Instanzvariablen, die zur Benutzung in Ausdrücken zur Verfügung stehen.
    private int i;
    private int k;
    private int m;
    private int n;

    /**
     * Konstruktor für Objekte der Klasse Ausdrücke
     */
    public Ausdruecke()
    {
        i = 4;
        k = 14;
        m = 3;
        n = 2;
    }

    /**
     * Eine Beispiel-Methode, die einen Ausdruck auswertet und das Ergebnis ausgibt.
     */
    public void summe()
    {
        int summe;
        summe = 5 + 9; // Summe berechnen
        // und ausgeben
        System.out.println("5 + 9 = " + summe);
    }
   
    public void summeii()
    {
        int summeii;
        summeii = k - i * 7 + 13;
        
        System.out.println("k - i * 7 + 13 = " + summeii);
    }
    
    public void summeiv()
    {
        int summeiv;
        summeiv = k % m;
        
        System.out.println("k % m = " + summeiv);
    }
}
 
Poste doch mal bitte den Originalcode, dieser kann es ja nicht sein, hier gibts keine Zeile 49!
Dein geposteter Code , mit der Zeile 42 sollte so aber eig. funktionieren!
 
Java:
/**
 * Diese Klasse dient dem Studium arithmetischer Ausdrücke.
 * 
 * 
 * @version (0.1 / 11.2007)
 */
public class Ausdruecke
{
    // Einige Instanzvariablen, die zur Benutzung in Ausdrücken zur Verfügung stehen.
    private int i;
    private int k;
    private int m;
    private int n;

    /**
     * Konstruktor für Objekte der Klasse Ausdrücke
     */
    public Ausdruecke()
    {
        i = 4;
        k = 14;
        m = 3;
        n = 2;
    }

    /**
     * Eine Beispiel-Methode, die einen Ausdruck auswertet und das Ergebnis ausgibt.
     */
    public void summe()
    {
        int summe;
        summe = 5 + 9; // Summe berechnen
        // und ausgeben
        System.out.println("5 + 9 = " + summe);
    }
   
    public void summeii()
    {
        int summeii;
        summeii = k - i * 7 + 13;
        
        System.out.println("k - i * 7 + 13 = " + summeii);
    }
    
    public void summeiv()
    {
        int summeiv;
        summeiv = k % m;
        
        System.out.println("k % m = " + summeiv);
    }
}
 
Wo rufst du denn die Methoden auf? Wie sieht die passende main-Methode aus? Oder ist das wieder so ein komisches Feature von BlueJ, wo man keine main-Methode braucht?
 
Ich hab erst vor 2 Wochen angefangen java zu lernen und den Begriff "main methode" höre ich jetzt zum ersten mal. Das Projekt "Arithmetik" habe ich von meinem prof bekommen. Es besteht aus 2 Klassen nämlich "Ausdrücke" und "zahleninfo" ich poste jetzt mal die codes von beiden klassen. ich hab daran nichts verändert ausser bei "Ausdrücke" habe ich den konstruktor und die methoden geschrieben.

"Ausdrücke":
Java:
/**
 * Diese Klasse dient dem Studium arithmetischer Ausdrücke.
 * 
 * 
 * @version (0.1 / 11.2007)
 */
public class Ausdruecke
{
    // Einige Instanzvariablen, die zur Benutzung in Ausdrücken zur Verfügung stehen.
    private int i;
    private int k;
    private int m;
    private int n;

    /**
     * Konstruktor für Objekte der Klasse Ausdrücke
     */
    public Ausdruecke()
    {
        i = 4;
        k = 14;
        m = 3;
        n = 2;
    }

    /**
     * Eine Beispiel-Methode, die einen Ausdruck auswertet und das Ergebnis ausgibt.
     */
    public void summe()
    {
        int summe;
        summe = 5 + 9; // Summe berechnen
        // und ausgeben
        System.out.println("5 + 9 = " + summe);
    }
   
    public void summeii()
    {
        int summeii;
        summeii = k - i * 7 + 13;
        
        System.out.println("k - i * 7 + 13 = " + summeii);
    }
    
    public void summeiv()
    {
        int summeiv;
        summeiv = k % m;
        
        System.out.println("k % m = " + summeiv);
    }
}




"zahleninfo":
Java:
/**
 * Die Klasse ZahlenInfo enthält einige Methoden mit deren Hilfe
 * Informationen über Zahlen abgefragt werden können.
 * 
 * Die Objekte der Klasse halten keinen Zustand. Alle Methoden
 * erhalten die notwendigen Informationen über Parameter.
 * 
 * 
 * @version 10.11
 */
public class ZahlenInfo
{
    /**
     * Konstruktor für Objekte der Klasse ZahlenInfo bleibt leer,
     * da keine Datenfelder initialisiert werden müssen.
     */
    public ZahlenInfo()
    {
    }

}
 
Dann hast du den falschen Weg eingeschlagen - ließ dir wenigstens Anfangskapitteln eines Java-Buchs durch.
Ändert aber nichts an der Tatsache, dass der Fehler so nicht reproduzierbar ist.

P.S. in wie fern ist jetzt ZahlenInfos relevant?
 
Dann hast du den falschen Weg eingeschlagen - ließ dir wenigstens Anfangskapitteln eines Java-Buchs durch.
Ändert aber nichts an der Tatsache, dass der Fehler so nicht reproduzierbar ist.

P.S. in wie fern ist jetzt ZahlenInfos relevant?



Ich hab ja nicht mit dem thema hier angefangen ich hab schon die ganzen grundlagen gelernt und behersche diese auch...
Also hier kann mir auch niemand sagen wo dieser Fehler herkommt bzw. wie man ihn beheben kann?
 
Es gibt kein Fehler im Code... was BlueJ drauß macht - k.a.

Welche Grundlagen hast du denn gelernt, wenn du nie was von einer main-Methode gehört hat? :bahnhof: Und "ganzen Grundlagen" hört sich auch verdächtig falsch an.
 
Es gibt kein Fehler im Code... was BlueJ drauß macht - k.a.

Welche Grundlagen hast du denn gelernt, wenn du nie was von einer main-Methode gehört hat? :bahnhof: Und "ganzen Grundlagen" hört sich auch verdächtig falsch an.



Ich lerne mit dem buch "java lernen mit bluej". Java lernen mit BlueJ: Eine Einführung in die objektorientierte Programmierung: Amazon.de: David J. Barnes, Michael Kölling: Bücher

Ich bin jetzt mit Kapitel 2 fertig und bis jetzt wurde der Begriff "main methode noch nicht erwähnt.
Ich hab auch grad gesehen, dass das erst in kapitel 7 kommt.
Kannst ja mal en bisschen durchblättern 🙂
 
Ich hab noch eine weitere Aufgabe die ich lösen muss, ich weiss aber nicht wirklich wie kann mir da jemand helfen?
Hier die Aufgabe : "Erstellen Sie eine Methode datenfelderZurücksetzen(), welche die Datenfelder der Klasse
Ausdruecke auf ihren ursprünglichen Wert zurücksetzt."
Danke im Vorraus!
 
Du veränderst keine Werte in Audruecke, deswegen kannst du die auch nicht zurücksetzen. Du musst also erstmal etwas sinnvolles aus der Klasse machen, bevor du diese Aufgabe machen kannst.
Wo genau ist denn dein Problem? Was hast du bist jetzt? Welche Ansätze hast du?
 
Das gleiche habe ich mir auch geadcht die Werte sind ja fest vergeben...
Aber ich glaube auch nicht, dass der prof uns die Aufgabe gibt wenn sie nicht lösbar ist.
Was meinst du denn damit, dass ich erstmal etwas "sinnvolles" aus der Klasse machen muss?
 
Ich habe nicht gesagt, dass die nicht lösbar ist, ich habe nur gesagt, dass bei dir die Klasse kein Sinn macht.
Und wenn ich mir deine Aufgabenstellung so angucken.... moment... welche Aufgabenstellung....
 
Ich will damit sagen, dass ich keine Ahnung habe, was du eigentlich machen musst/willst/sollst, weil du keine Aufgabenstellung geschrieben hast.
 
Klar hab ich die Aufgabenstellung beschrieben...
Ich posts aber gerne nochnmal ;-)


11. a. Werten Sie die folgenden Ausdrücke entsprechend den Regeln der Java-Syntax schriftlich
aus. Dazu seien int i = 4, k = 14, m = 3, n = 2; definiert.
i) 15 + 2 + 8 - 4 viii) k = k % m
ii) k - i * 7 + 13 ix) i + k <= n * m
iii) 5 + 38 / m x) n = n * 2
iv) k % m xi) 2 >= k / 5
v) i / k * m xii) k % 4 == m % n
vi) i + 15 % 7 + k xiii) i + m % k > k - m
vii) m = m + i * 3 xiv) i / 2 * 3 != i * 3 / 2
b. Kopieren Sie das Projekt Arithmetik vom Laufwerk O:\Paul\Programmierung1\Projekte
\Kapitel02.
Erstellen Sie in der Klasse Ausdruecke einige geeignete Methoden, welche die Ausdrücke
aus Aufgabenteil a) auswerten (eine Methode pro Ausdruck), das Ergebnis in einer
lokalen Variablen zwischenspeichern und anschließend zusammen mit dem ausgewerteten
Ausdruck ausgeben. Vergleichen Sie das Ergebnis mit Ihrer Rechnung.
c. Erstellen Sie eine Methode datenfelderZurücksetzen(), welche die Datenfelder der Klasse
Ausdruecke auf ihren ursprünglichen Wert zurücksetzt.

11b hatten wir ja gestern schon und jetzt muss ich noch 11c machen.
 
Ja... dann brauchst du so auf anhieb 17 Methoden.
Und JETZT macht die Aufgabe c auch einen Sinn, denn deine Variablen verändern sich ja auch bei manchen Ausdrücken. z.B. "k=k%m"
Dann brauchst du eine Methode, die die Werte wieder auf den Anfangszustand setzt. Dafür musst du aber den Anfangszustand auch gespeichert halten.
 
Ok danke erstmal.
Kannst du mir vielleicht ein paar Anreize geben wie das ungefähr auszusehen hat ich stehe nämlich im moment echt auf dem schlauch...
 
Wenn ich das richtig verstanden habe willst du mir sagen, dass ich für jeden Ausdruck eine Methode erstellen muss oder?
Ich kann mir kaum vorstellen, dass das so richtig ist es ist ja auch in der Aufgabenstellung beschrieben, dass man die DATENFELDER der klasse Ausdrücke auf ihren ursprünglichen Wert zurücksetzen soll und die datenfelder der klasse Ausdrücke sind i, k, m und n. Das muss doch auch irgendwie anders gehen als für jeden Ausdruck extra eine methode zu erstellen oder? Kann man nicht mit einer Methode irgendwie alle datenfelder von allen Ausdrücken zurück setzen?
hier nochmal der code:

Java:
/**
 * Diese Klasse dient dem Studium arithmetischer Ausdrücke.
 * 
 * 
 * @version (0.1 / 11.2007)
 */
public class Ausdruecke
{
    // Einige Instanzvariablen, die zur Benutzung in Ausdrücken zur Verfügung stehen.
    private int i;
    private int k;
    private int m;
    private int n;

    /**
     * Konstruktor für Objekte der Klasse Ausdrücke
     */
    public Ausdruecke()
    {
        i = 4;
        k = 14;
        m = 3;
        n = 2;
    }

    /**
     * Eine Beispiel-Methode, die einen Ausdruck auswertet und das Ergebnis ausgibt.
     */
    public void summe()
    {
        int summe;
        summe = 5 + 9; // Summe berechnen
        // und ausgeben
        System.out.println("5 + 9 = " + summe);
    }
   
    
    public void summeii()
    {
        int summeii;
        summeii = k - i * 7 + 13;
        
        System.out.println("k - i * 7 + 13 = " + summeii);
    }
    
    
    public void summeiv()
    {
        int summeiv;
        summeiv = k % m;
        
        System.out.println("k % m = " + summeiv);
    }
    
    
    public void summeviii()
    {
        int summeviii;
        summeviii = k = k % m;
        
        System.out.println("k = k % m = " + summeviii);
    }    
    
    
    public void summexiv()
    {
        boolean summexiv;
        summexiv = i / 2 * 3 != i * 3 / 2;
        
        System.out.println("i / 2 * 3 != i * 3 / 2 = " + summexiv);
    }   
    


}
 
Noch ein Problem wegen dem ich euch stören muss...
Die Aufgabe lautet : "Ergänzen Sie in der Klasse Ausdruecke eine Methode summe(), der zwei ganze Zahlen
übergeben werden. Die Methode soll die Summe der beiden Zahlen zurückgeben."
Ich bin schon die ganze Zeit am tüfteln aber bekomme es nicht hin...

Java:
/**
 * Diese Klasse dient dem Studium arithmetischer Ausdrücke.
 * 
 * @author (HHPaul) 
 * @version (0.1 / 11.2007)
 */
public class Ausdruecke
{
    // Einige Instanzvariablen, die zur Benutzung in Ausdrücken zur Verfügung stehen.
    private int i;
    private int k;
    private int m;
    private int n;
    private int x;
    private int y;
 

    /**
     * Konstruktor für Objekte der Klasse Ausdrücke
     */
    public Ausdruecke()
    {
        i = 4;
        k = 14;
        m = 3;
        n = 2;
     
        
       
      
    }
    


    /**
     * Eine Beispiel-Methode, die einen Ausdruck auswertet und das Ergebnis ausgibt.
     */
    public void summe()
    {
        int summe;
        summe = 5 + 9; // Summe berechnen
        // und ausgeben
        System.out.println("5 + 9 = " + summe);
    }
   
    
    public void summeii()
    {
        int summeii;
        summeii = k - i * 7 + 13;
        
        System.out.println("k - i * 7 + 13 = " + summeii);
    }
    
    
    public void summeiv()
    {
        int summeiv;
        summeiv = k % m;
        
        System.out.println("k % m = " + summeiv);
    }
    
    
    public void summeviii()
    {
        int summeviii;
        summeviii = k = k % m;
        
        System.out.println("k = k % m = " + summeviii);
    }    
    
    
    public void summexiv()
    {
        boolean summexiv;
        summexiv = i / 2 * 3 != i * 3 / 2;
        
        System.out.println("i / 2 * 3 != i * 3 / 2 = " + summexiv);
    }   
    
    
   public void datenfelderZurücksetzen()
   {
        i = 4;
        k = 14;
        m = 3;
        n = 2;
   }
    
   
   
   
   public void summe1()
   {
       int summe1;
       summe1 = x + y;
      
       
       System.out.println(" " + x + " + " + y + " = " + summe1);
    }    
 

}


Ich habe in meinem code "summe" "summe1" genannt.
Danke schonmal im Vorraus
 
dir fehlen offensichtlich Grundlagen oder du liest die Aufgabenstellungen nicht richtig. Wo werden in der Methode zwei Werte übergeben? Wo wird etwas zurückgegeben? Richtig - nirgends!

Weißt du was
Code:
void
bedeutet?
 
dir fehlen offensichtlich Grundlagen oder du liest die Aufgabenstellungen nicht richtig. Wo werden in der Methode zwei Werte übergeben? Wo wird etwas zurückgegeben? Richtig - nirgends!

Weißt du was
Code:
void
bedeutet?



Mein Problem ist ich hab keine ahnung was man schreiben muss um später über bluej die parameter eingeben zu können. Kannst du mir da helfen?
Und ja ich weiss was void bedeutet.
 
Wie das nun mit BlueJ funktioniert kann ich dir nicht sagen nein, aber das spielt zu dem Zeitpunkt doch keine ROlle, du solltest den Java Code richtig schreiben, schließlich willst du Java lernen und nicht: wie kann ich falschen Code mit BlueJ doch richtig ausführen oder so.
Wenn du weißt was void bedeutet, wieso schreibste es dann hin? Eine Ganzzahl addiert mit noch einer ergibt wieder eine, was musst du also dann zurückgeben? Was musst du der Methode wie übergeben?

Schon einmal etwas von getter und setter z.B. gehört? Daran könnte man sich orientieren, wenn aber erst main-Methoden in Kapitel 7 vorgestellt werden, denke ich, hast du davon bisher auch noch nichts gelesen? ;(
 
Von getter und setter habe ich noch nichts gehört.
Es müsste public int summe heissen ka warum ich da void hingeschrieben hab...
Ich meine ja wie man das im java code richtig schreibt, dass man dann später aufgefordert wird die 2 variablen einzugeben, dass diese dann addiert werden.
Kannst du mir vielleicht mal schnell einen Beispielcode schreiben damit ich mir das mal anschauen kann?
Ich weiss ja wie man per java eine Aufgabe löst, was ich aber nicht hinbekomme ist die spätere parameterübergabe vom user.
Muss ich da noch was im Konstruktor ändern?
Danke
 
Fang doch erstmal klein an. Schreibe dir eine Methode, die 2 int Zahlen übergeben bekommt und dann die Summe zurück gibt.
Dann schreibst du dir ein Programm, was Zahlen vom Benutzer einlesen kann.
Dann verbindest du das ganze
 
Kann mir da nichtmal jemand ein Beispiel geben ich steh momentan echt aufm Schlauch.
Ich will das ja lernen und das kann ich am effektivsten, indem ich den code vor mir hab und mir den anschaue.
 
Ein Code wozu? Summe berechnen:
Java:
int sum = a+b;
Den Rest findest du in jedem Java-Buch. Googlen nach "java zahl eingeben" kann sicherlich auch nicht schaden.
 
In der Aufgabe steht doch gar nichts davon dass ein User zwei Zahlen eingeben soll?
Wieso erstellst du nicht einfach die Methode und rufst sie in deinem Programm mit zwei x-beliebigen Zahlen auf? ;/ (bzw. eig. steht da ja noch nicht einmal dass du die Methode überhaupt irgendwo aufrufen sollst)
 
Also die Aufgabe lautet "Ergänzen Sie in der Klasse Ausdruecke eine Methode summe(), DER ZWEI GANZE ZAHLEN ÜBERGEBEN WERDEN".
Ich glaube schon, dass damit gemeint ist, dass von dem Benutzer 2 Zahlen eingegeben werden sollen.
100%ig sicher bin ich allerdings nicht.
 

Zurück
Oben