1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Grundlegendes Problem mit Java

  • By_Myslf
  • 3. März 2010 um 19:35
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • By_Myslf
    Gast
    • 3. März 2010 um 19:35
    • #1

    Ich programmiere seit kurzer Zeit in Java. Doch nun habe ich bei einer Aufgabe ein Problem:

    Ich habe ein Objekt Gefaess mit den Attributen Volumen und Füllhöhe erstellt und es soll die Methoden leeren und füllen jeweils mit und ohne Parameter geben. Nun will ich dafür jedoch einen Konstruktor verwenden und da entsteht mein Problem: Wenn man den Konstruktor in die main-Methode einbaut und dann fuellen ausführt, rutscht der immer in den else teil der if abfrage, obwohl er eigentlich den ersten Teil ausführen müsste.

    Code
    public class Gefaess {
    
    
    private static int volumen;
    private static int  fuellstand;
    
    
      public static void Gefaess(){
         volumen =  1000;
         fuellstand = 0;
      }
      public static void Gefaess(int  wert){
         volumen = wert;
         fuellstand = 0;
      }
      public static  void fuellen() {
        fuellstand = volumen;
        System.out.println("Der  Füllstand beträgt " + fuellstand);
      }
      public static void leeren()  {
        fuellstand = 0;
        System.out.println("Der Füllstand beträgt " +  fuellstand);
      }
      public static void fuellen(int a) {
       [COLOR=Red] if(volumen  >= a){
          fuellstand = fuellstand + a;
          System.out.println("Der  Füllstand beträgt " + fuellstand);
        }
        else {
           System.out.println("Error füllen");
        }[/COLOR]
      }
      public static void  leeren(int b){
        if(fuellstand >= b){
          fuellstand = fuellstand -  b;
          System.out.println("Der Füllstand beträgt " + fuellstand);
        }  else {
          System.out.println("Error leeren");
        }
      }
      public  static void main(String[] args) {
      Gefaess dose = new Gefaess();
       dose.fuellen(100);
      }
    }
    Alles anzeigen



    Ich hab den Fehler mal rot markiert. Der Attributwert für das volumen geht immer auf 0. Deswegen der Error. Hat einer eine Lösung dafür? Bräuchte die bis freitag. Wär nett wenn sich einer bemüht.

    Danke schon im Vorraus.

  • BayK
    Punkte
    46
    Beiträge
    8
    • 3. März 2010 um 19:41
    • #2

    attributvariablen eines Objekts sollten nicht static sein

    edit: Konstruktoren und Funktionen eines Objekts auch nicht

  • sutupud
    Punkte
    1.659
    Beiträge
    320
    • 3. März 2010 um 19:47
    • #3

    achtung: bei dir ist alles statisch. statische methoden und felder gehören zur klasse selbst und sind unabhängig von den erzeugten objekten.
    das einzige, was bei dir statisch sein muss ist die main-methode.
    und der konstruktor darf keinen returnwert haben, du defninierst hier also eine methode mit dem namen des konstruktors und keinen konstruktor.
    außerdem: wenn schon was im gefäß ist, muss das auch berücksichtigt werden.
    also:

    PHP
    public class Gefaess {
    
    
    private int volumen;
    private int fuellstand;
    
    
      public Gefaess(){
         volumen =  1000;
         fuellstand = 0;
      }
      public Gefaess(int  wert){
         volumen = wert;
         fuellstand = 0;
      }
    
    
      public void fuellen() {
        fuellstand = volumen;
        System.out.println("Der  Füllstand beträgt " + fuellstand);
      }
      public void leeren()  {
        fuellstand = 0;
        System.out.println("Der Füllstand beträgt " +  fuellstand);
      }
      public void fuellen(int a) {
        if(volumen  >= fuellstand + a){
          fuellstand = fuellstand + a;
          System.out.println("Der  Füllstand beträgt " + fuellstand);
        }
        else {
           System.out.println("Error füllen");
        }
      }
      public void  leeren(int b){
        if(fuellstand >= b){
          fuellstand = fuellstand -  b;
          System.out.println("Der Füllstand beträgt " + fuellstand);
        }  else {
          System.out.println("Error leeren");
        }
      }
      public static void main(String[] args) {
      Gefaess dose = new Gefaess();
       dose.fuellen(100);
      }
    }
    Alles anzeigen
  • Blutsturz
    Punkte
    1.351
    Beiträge
    261
    • 3. März 2010 um 23:01
    • #4
    Zitat von By_Myslf

    Nun will ich dafür jedoch einen Konstruktor verwenden...

    tust du aber nicht, das solltest du schon allein daran erkennen, dass ein Konstruktor so heisst wie die Klasse selbst, erzeugt ("instanziert") diese "Methode" doch ein Objekt eben dieser Klasse...

    Konstruktoren in der Klasse "Gefaess" können also nur so aussehen:

    public Gefaess( <Argumente> ) {
    ...
    }

    noch ein paar kleinigkeiten:

    1) verwende wenn möglich englische bezeichner für variablen und methoden
    2) nach Konvention verwendet man sogenannte setter/getter-Methoden um Objektattribute zu verändern

    ..wie/wo hast du programmieren gelernt, wenn ich fragen darf? vielleicht schaust du mal da vorbei:

    http://openbook.galileocomputing.de/javainsel8/javainsel_00_001.htm

    und ziehst dir kapitel 6 nochmal rein...

    Einmal editiert, zuletzt von Blutsturz (3. März 2010 um 23:06)

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum