[Java] Implementieren einer Methode: token "if", invalid

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Creater, 21. Mai 2012 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 21. Mai 2012
    Zuletzt bearbeitet: 4. Juni 2012
    Implementieren einer Methode: token "if", invalid

    Hey Leute, hab ne kurze frage, die aufgabenstellung lautet wie folgt:

    Wenn die Flasche nicht mehr verschlossen ist, heissts: kronkorken == false (kronkorken istn boolean)
    die variable zum aktuellen füllstand lautet: aktVol und wurde bereits als attribut in der klasse definiert.

    Ich bin etz so weit:


    Ich bekomme nun von Eclipse eine Fehlermeldung:

    Was hab ich falsch gemacht? Habt ihrn Rat?

    lg
     
  2. 21. Mai 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    Du kannst das If-Statement nicht außerhalb der Methode nutzen. Deine Idee ist schon richtig, aber es müsste so lauten:
    Code:
    public void trinken(double aktVol) {
     if (kronkorken == false) {
     if(aktVol >= 0.12){
     this.aktVol = aktVol - 0.12;
     }
     if(aktVol < 0.12){
     this.aktVol = 0;
     }
     System.out.println("Das aktuelle Volumen hat sich um 0.12 Liter verringert. " + "Es sind noch " + aktVol + " Liter in der Flasche."); 
     }
    }
    
    Aber du musst noch mal kurz nachdenken, denn wenn aktVol < 0.12 ist, stimmt deine Ausgabe nicht mehr.
     
    1 Person gefällt das.
  3. 21. Mai 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    1. kannst deine IF Abfrage (if (kronkorken == false)) nicht außerhalb deiner Funktion stehen haben. Woher soll dein Programm wissen wann diese abgefragt werden soll?
    2. Ich würde bei der Volumenüberprüfung keine zwei IF Abfragen nehmen, sondern eine IF ELSE Konstilation.

    //edit: Zu lahm
     
    1 Person gefällt das.
  4. 21. Mai 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    ok habs, einfach diese Ausgabe in den if(aktVol >= 0.12){ Körper packen, und

    in den if(aktVol < 0.12){

    Ich danke euch beiden, war ein dummer Fehler, saß aber über ne Stunde dran
     
  5. 21. Mai 2012
    Zuletzt bearbeitet: 21. Mai 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    Ich finde den Ansatz eigentlich relativ "ungünstig", wenn man davon ausgeht, dass hier OOP vermittelt werden soll (worauf das "this" schließen lässt). Ich kann auch nicht verstehen warum das von zwei Leuten hier knallhart ignoriert wird.

    Das ganze wird wohl eher in dieser Richtung angedacht worden sein:

    Code:
    public class Flasche {
    
     public static void main(String[] args) {
     Flasche meineFlasche = new Flasche(1); // Neue Flasche mit einem Liter Inhalt erzeugen
     meineFlasche.kronkorkenEntfernen(); //Den Kronkorken entfernen.
     meineFlasche.trinken(); //Einen Schluck trinken
     }
    
     public static final double SCHLUCK = 0.12; //Die Menge welche aus der Flasche getrunken werden kann
    
     private double fuellstand; //Der aktuelle Füllstand
    
     private boolean kronkorkenVorhanden = true; //Der Zustand des Kronkorkens
    
     public Flasche(double fuellstand) { //Neue Flasche mit Füllstand erzeugen
     super();
     this.fuellstand = fuellstand;
     }
    
     public void trinken() {
     if (!kronkorkenVorhanden) //Wenn der Kronkorken nicht vorhanden ist
     if (fuellstand >= SCHLUCK) { //Wenn mehr in der Flasche ist als getrunken werden kann
     this.fuellstand -= SCHLUCK; //Einen Schluck abziehen
     } else {
     this.fuellstand = 0; //Ansonsten ist die Flasche leer
     }
     System.out.println("Das aktuelle Volumen hat sich um " + SCHLUCK
     + " Liter verringert. " + "Es sind noch " + fuellstand
     + " Liter in der Flasche.");
     }
    
     public void kronkorkenEntfernen() {
     if (kronkorkenVorhanden) { //Wenn der Kronkorken noch vorhanden ist
     this.kronkorkenVorhanden = false; //Wird er gezogen
     } else {
     System.out.println("Flasche bereits geöffnet!");
     }
    
     }
    }
    
    [Java] RR - Pastebin.com

    Du solltest dir allgemein mal das Prinzip der Objektorientierten Programmierung verdeutlichen.

    //Edit: Mir ist klar, dass die Kommentare an manchen Stellen nicht 100%tig sind.
     
    1 Person gefällt das.
  6. 22. Mai 2012
    Zuletzt bearbeitet: 22. Mai 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    Deine erstellte Klasse ist doch überhaupt nichts anderes als das, was Creater schon hat.
    Genauso ist höchstwahrscheinlich auch eine Methode zum öffnen der Flasche vorhanden. Wie dem auch sei, ist das ja völlig außerhalb des Aufgabenrahmens.

    Du hast allerdings recht, dass der Parameter aktVol in der Methode trinken fehl am Platz ist. Das ist mir beim ersten Lesen gar nicht aufgefallen. Besser wäre tatsächlich:
    Code:
    public void trinken() {
     if (kronkorken == false) {
     if(this.aktVol >= 0.12){
     this.aktVol = this.aktVol - 0.12;
     } else {
     this.aktVol = 0;
     }
     System.out.println("Das aktuelle Volumen hat sich um 0.12 Liter verringert. " + "Es sind noch " + this.aktVol + " Liter in der Flasche."); 
     }
    
    Bzw. noch die Änderung wegen der falschen Ausgabe, die Creater ja aber schon gelöst hat.
     
  7. 22. Mai 2012
    Zuletzt bearbeitet: 22. Mai 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    Genau das ist ja der Teil den ich meinte. Die anderen Methoden und Dinge habe ich nur für mich hinzugefügt, weil mir gerade langweilig war. Aber diese Sache mit der Methode und dem Zugriff auf das Attribut ist ziemlich elementar.

    Sein Ansatz war natürlich, wenn man das logische Problem betrachtet, vollkommen richtig. Das war aber bestimmt nicht der Fokus (sofern er nicht gerade in der vierten Klasse ist und die Grundrechenarten lernt).

    Ansonsten waren es halt kleine Sachen wie Dinge (0.12) in Konstanten zu isolieren oder Operatoren zu kombinieren (-= ), aber das sind für das Verständnis erstmal unwichtige Dinge.
     
  8. 3. Juni 2012
    Zuletzt bearbeitet: 3. Juni 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    So leuts, erstma ein dickes dankeschön, dass ihr euch so viel mühe für mein fragen gegeben habt, hat mir in der ersten hausaufgabe sehr geholfen

    bin nun mittlerweile in der 2. angelangt, und hab wieder paar Problemstellen, die ich auch nach einigen Stunden nachdenken nicht lösen kann..

    1. Problem

    Spoiler
    Es gibt 3 Klassen. Eine Klasse Gefaess, eine Unterklasse von Gefaess die Flasche heisst, und eine unabhängige Klasse Kiste.

    Der Konstruktor soll, wenn Gefaesse erstellt werden, diese mit Seriennummern bestücken, angefangen bei 1.

    Aber der Code, den ich programmiert habe, funktioniert leider nicht, die Seriennummer bleibt beim erstellen von Gefässen immer bei 1.


    2. Problem

    Spoiler
    Es geht um die Klasse Kiste:



    Die Kiste ist ein 2D-Array, welche mit Flaschen gefüllt werden soll. Die Flaschen die reingehören, dürfen aber nur Kistenspezifische maxFuellmenge haben, ich soll also das MAXVOL von Flasche auf maxFuellmenge setzen.

    (Das ist der Konstruktor von Flasche)

    Eclipse gibt beim Konstruktor von Kiste ne Fehlermeldung aus..weiß net so recht wie ich MAXVOL von Flasche gleichsetze mit maxFuellmenge, ohne den Konstruktor von Flasche anzulangen, jedoch in der Klasse Kiste das einzustellen.

    Kleines Unterproblem:
    Der Konstruktor soll dann auch die Methode fuellen aufrufen, aber wenn ich "kiste.fuellen();" einfüge, spuckt Eclipse auch ne Fehlermeldung (Cannot invoke fuellen() on the array type Flasche[][]), Rat? : )



    3. Problem

    Spoiler
    es geht um die Methode public void einschenken(Gefaess g),

    wenn kein Gefäß übergeben wird, soll System.err.println("Es wurden keine Gefäße ausgewählt"); erscheinen, und die Methode beendet werden:
    diese if anweisung ist Falsch, wie lautet sie richtig?

    die Methode soll, falls ein gefaess übergeben worden ist, die Kiste durchsuchen und die Flasche füllen ( In der klasse Flasche gibt es bereits eine Methode, die dies tut

    Diese Methode soll aufgerufen werden, und der Platz, an dem die Flasche war, soll nun mit "null" überschrieben werdne, die flasche soll also nicht mehr in der Kiste sein.
    Falls die Kiste keine Flasche mehr hat, soll eine Fehlermeldung ausgegeben werden.

    ich habe mir gedacht, die suche in der Kiste nach einer Flasche mit einer for schleife zu realisieren



    Kann sein, dass es totaler Stuss ist, aber ich hab wirklich keinen Plan, wie ich das anstelle ;(


    Wäre wirklich toll, wenn ihr ne Frage beantworten könntet. Würdet mir damit sehr helfen, lg
     
  9. 3. Juni 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    1.
    Die Variable count ist bei dir ein Member von Instanzen der Klasse Gefäß, d.h. sie ist für jedes Objekt unabhängig. Das soll aber nicht so sein, daher musst du sie als statisch deklarieren.

    2.
    Da steht irgendwie viel Unsinn, hier mal eine korrigierte Version. Wenn du sie nicht verstehst, nochmal nachfragen.
    Code:
    public class Kiste {
    
    Flasche[][] kiste;
    
    
    public Kiste(int i, int j, double maxFuellmenge){
     kiste = new Flasche[i][j];
     fuellen(maxFuellmenge);
    }
    
    
    public void fuellen(double maxVol){
     for(int i = 0; i < kiste.length; i++){
     for (int j = 0;j < kiste[i].length; j++){
     kiste[i][j] = new Flasche(maxVol);
     }
     }
    }
    
    3.
    Ein Gleichheitszeichen ( = ) ist eine Zuweisung, in einer If-Abrage willst du auf Gleichheit ( == ) testen.

    Denn Sinn der Methode einschenken habe ich noch nicht verstanden, erläuter das doch noch mal genauer.
     
  10. 3. Juni 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    hier aus dem aufgabenblatt kopiert:

     
  11. 3. Juni 2012
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Hausaufgabe, einfache Methode [Frage]

    Ich habe das mal programmiert, allerdings bin ich mir nicht sicher ob ich alles verstanden habe, was du meinst:

    No File | www.xup.in

    Bei Fragen kannst du einfach Ausschnitte auf dem Code hier zitieren und Fragen. (Ist ein Eclipse Projekt)
     
  12. 4. Juni 2012
    AW: Hausaufgabe, einfache Methode [Frage]

    Ich danke euch beiden wieder, Hausaufgabe nummer 2 wurde erfolgreich hochgeladen.

    Als nächstes kommt Tetris dran

    Werd ich schon hinkriegen, im Falle des Falles eröffne ich das Thema hier nochmal!

    lg und thx
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.