Klasse Auto erstellen - mir Qualmt der Kopf

Hallo,

ich bräuchte Eure Hilfe.
Beschäftige mich seit 3 Tagen und komme auf keine Lösung.
habe 2 Java Codes:

  1. EinfachesAuto
 // Attribute
   public String besitzer;
   public String autotyp;
   public String farbe;
   public int erstzulassung;
   public int leistung;
   public int kmStand;

 // Konstruktor
   public EinfachesAuto(String besitzer, String autotyp, String farbe,
                        int erstzulassung, int leistung, int kmStand){

     this.besitzer = besitzer;
     this.autotyp = autotyp;
     this.farbe = farbe;
     this.erstzulassung = erstzulassung;
     this.leistung = leistung;
     this.kmStand = kmStand;
   }

 // Methoden
 /** Berechnung des Alters des Autos
 *  @param ohne
 *  @return int alter
 */
 public int alter(){
     return 2009 - erstzulassung;
 }

 /** Einfache Ausgabe auf den Bildschirm
 *  @param ohne
 *  @return void
 */
 public void meldung(){
   System.out.print ("Hier gruesst das "+ farbe );
   System.out.print ("e Auto von " + besitzer);
 }
 }```

Dazu gibt es noch die Datei Autotest.java


Soweit kein Problem, arbeitet wie er soll.
Jedoch gibt es eine weitere Datei...

2. ErweitertesAuto

public class ErweitertesAuto
{
// Attribute -> an Methode übergebende Werte
public String besitzer;
public String autotyp;
public String farbe;
public int erstzulassung;
public int leistung;
public int kmStand;

// Zusatz Aufgabe Teil2
public String standort;
public long fahrgestellnummer;

// Konstruktor und Parameter
public ErweitertesAuto (String besitzer, String autotyp, String farbe,int erstzulassung, int leistung, int kmStand)
{

  this.besitzer = besitzer;
  this.autotyp = autotyp;
  this.farbe = farbe;
  this.erstzulassung = erstzulassung;
  this.leistung = leistung;
  this.kmStand = kmStand;

}

// Zusatz Aufgabe Teil 2, 2. Konstruktor
public ErweitertesAuto (String standort, long fahrgestellnummer)
{
this.standort = standort;
this.fahrgestellnummer = fahrgestellnummer;
}

// Methoden
/** Berechnung des Alters des Autos

  • @param ohne
  • @return int alter
    */

public int alter()
{
return 2009 - erstzulassung;
}

public String Ziel;
public int Entfernung;

/** Ausgabe

  • @param String Ziel und int Entfernung
  • @return void
    */
    public int faehrtNach(String Ziel, int Entfernung) {
return Entfernung + kmStand;
return Ziel;

}

/** Einfache Ausgabe auf den Bildschirm

  • @param ohne
  • @return void
    */

public void meldung()
{
System.out.print ("Hier gruesst das “+ farbe +” ");
System.out.print ("Auto von " + besitzer + ".
");
}

// Zusatz Aufgabe Teil2
public void alleDatenAusgeben()
{
System.out.println (“Daten des Fahrzeugs von " + besitzer +”:
");
System.out.println ("Autotyp: " + autotyp);
System.out.println ("Farbe: " + farbe);
System.out.println ("Erstzulassung: " + erstzulassung);
System.out.println (“Leistung: " + leistung + " PS”);
System.out.println ("KM-Stand: " + kmStand);
System.out.println ("Standort: " + standort);
System.out.println ("Fahrgestellnummer: " + fahrgestellnummer + "

");
}

  // Ausgabe Reise und neuer Kilometerstand
  int faehrtNach (String Ziel, int Entfernung)
  System.out.println("Auto fährt von " + standort + " nach " + Ziel + " " + Entfernung + " km");
  standort = Ziel;
  kmStand += Entfernung;
  return kmStand;

}```

Dazu hab ich noch die Autotest2.java

Nun beginnt das Problem.
Es soll der alte Konstruktor von Einfaches Auto genauso übernommen werden und ein 2. Eigener Konstruktor dazugeschrieben werden.
Am Ende soll eine Fahrt von standort nach ziel gemacht werden. die Kilometer sollen dem Kilometerstand zugerechnet und der Neue Kilometerstand übernommen werden und auf dem Bildschirm angezeigt werden.
Ich denke ich hab so ziemlich alles Falsch gemacht was geht.
Ich bin übrigens kein Schüler, ich beschäftige mich mit der Materie Java erst seit kurzem. Aber jetzt bin ich festgefahren und weiss einfach nicht weiter.
Bitte helft mir auf die Sprünge.

LG
Nicky

Du hast da einen Fehler drin

   *  @param String Ziel und int Entfernung
   *  @return void
   */
   public int faehrtNach(String Ziel, int Entfernung) {
 
    return Entfernung + kmStand;
    return Ziel;
 
}```
Das geht nicht eine Methode kann nur einen Returnwert haben.

Hallo,

könnte ich das dann komplett rausnehmen?
Mir fällt gerade auf das es auch doppeltgemoppelt ist.

denn in den letzten zeilen:

      // Ausgabe Reise und neuer Kilometerstand
      System.out.println("Auto fährt von " + standort + " nach " + Ziel + " " + Entfernung + " km");
      standort = Ziel;
      kmStand += Entfernung;
      return new kmStand;

kommt es ja nochmal vor?
Kann man das nicht vereinfachen?
Desweiteren bekam ich einen Tipp anstatt public -> private ab Zeile 71 zu verwenden.

Ja das kannst du rausnehmen, vereinfachen wüsste ich jetzt auf den ersten Blick nichts.
Ich würds bei public belassen, aber sowas hängt immer von deinem Verwendungszweck ab. Muss die Methode von außerhalb aufgerufen werden dann sollte sie schon public sein, wird sie nur von deiner Klasse aufgerufen würd ich sie private oder protected machen.

Bei den letzten Codezeilen wird aber immer noch ein Fehler angezeigt.
Er kann die Sympole nicht finden,

      System.out.println("Auto fährt von " + Standort + " nach " + Ziel + " " + Entfernung + " km");
      standort = Ziel;
      kmStand += Entfernung = new kmStand;
      return new kmStand;```

Da scheint etwas zu fehlen...

Wie schaffe ich es den Neuen Kilometerstand und Standort zuzuweisen und am Bildschirm auszugeben.
Mir fehlt der Bezug...

Danke für den Tipp, manchmal sieht man vor lauter "Bäumen" den Wald nicht mehr.

oh das hab ich garnicht gesehen
warum machst du kmStand += Entfernung = new kmStand; ?
weil new kmStand; das ist auf jeden Fall falsch

Stimmt…

kmStand += Entfernung

sollte so richtig sein.
Der Code scheint an und für sich in Ordnung zu sein, jedoch melded mir das Programm immer noch Fehler.
Kann Sympole nicht finden.
Was mach ich falsch?

du musst mal genauer werden, wo sagt er das weil er sagt dir immer die passende Zeile dazu

Es beginnt ab Zeile 76…

ErweitertesAuto2.java:77: expected
standort = Ziel;

ErweitertesAuto2.java:78: expected
kmStand += Entfernung;

ErweitertesAuto2.java:79: illegal start of type
return new kmStand;

ErweitertesAuto2.java:79: <;> expected
return new kmStand;

ErweitertesAuto2.java:79: expected
return new kmStand;

Blicke jetzt gar nicht mehr durch…InsgesamI
Ingesamt ab Zeile 76 Fehler…

du hast die { bei der Methode vergessen und mach die Methode mal public

So jetzt habe ich fast alle fehler ausgemerzt.
Bis auf einen.
Da komme ich nicht klar.

Das ganze schaut dank Dir jetzt so aus:

{
   // Attribute -> an Methode übergebende Werte
   public String besitzer;
   public String autotyp;
   public String farbe;
   public int erstzulassung;
   public int leistung;
   public int kmStand;

   // Zusatz Aufgabe Teil2
   public String standort;
   public long fahrgestellnummer;

   // Konstruktor und Parameter
   public ErweitertesAuto2(String besitzer, String autotyp, String farbe,int erstzulassung, int leistung, int kmStand)
   {

      this.besitzer = besitzer;
      this.autotyp = autotyp;
      this.farbe = farbe;
      this.erstzulassung = erstzulassung;
      this.leistung = leistung;
      this.kmStand = kmStand;
   }

   // Zusatz Aufgabe Teil 2, 2. Konstruktor
    public ErweitertesAuto2 (String standort, long fahrgestellnummer)
   {
      this.standort =  standort;
      this.fahrgestellnummer = fahrgestellnummer;
   }

   // Methoden
   /** Berechnung des Alters des Autos
   * @param ohne
   * @return int alter
   */

   public int alter()
   {
      return 2009 - erstzulassung;
   }

    public String Ziel;
    public int Entfernung;


   public void meldung()
   {
      System.out.print ("Hier gruesst das "+ farbe +" ");
      System.out.print ("Auto von " + besitzer + ".
");
   }

   // Zusatz Aufgabe Teil2
   public void alleDatenAusgeben()
   {
      System.out.println ("Daten des Fahrzeugs von " + besitzer +":
");
      System.out.println ("Autotyp: " + autotyp);
      System.out.println ("Farbe: " + farbe);
      System.out.println ("Erstzulassung: " + erstzulassung);
      System.out.println ("Leistung: " + leistung + " PS");
      System.out.println ("KM-Stand: " + kmStand);
      System.out.println ("Standort: " + standort);
      System.out.println ("Fahrgestellnummer: " + fahrgestellnummer + "

");
   }

      // Ausgabe Reise und neuer Kilometerstand

   public void reiseDatenAusgabe()
   {
      System.out.println("Auto fährt von " + standort + " nach " + Ziel + " " + Entfernung + " km");
      standort = Ziel;
      kmStand += Entfernung;
      return new kmStand;          // Diese Zeile wird noch als Fehler angezeigt.
    }
  }```

Als Fehler kommt:
Erweitertes Auto.java:82: `(` or `[` expected
                                return new kmStand;

1 error

Wie kann ich das lösen.
Ist ja das wichtigste, das der neue kmStand und Standort nach der Reise übernommen wird. Ich danke Dir das du Dir die Zeit genommen hast.

mach mal das new weg :wink:

Warum darf das nicht new sein? :eek: :smiley:
Ist doch der neue kmStand.
OK, new ist gestrichen und immer noch Fehler. :verzweifel:


   public void reiseDatenAusgabe()
   {
      System.out.println("Auto fährt von " + standort + " nach " + Ziel + " " + Entfernung + " km");
      standort = Ziel;
      kmStand += Entfernung;
      return kmStand;
    }
  }```

Fehlermeldung:
Erweitertes Auto.java:82: cannot return a value from method whos result type is void
return kmStand;

mit new legst du ein neues Objekt an
String s = new String();
oder Object o = new Object();

Aber du musst immer einen Konstruktor einer Klasse aufrufen, du hast ja nur new vor eine Variable geschrieben.

Du musst deinen Rückgabetyp auf int ändern, du hast void und void sagt aus das deine Methode keinen Rückgabewert hat. Daher der Fehler.

Verstehe!
Die Werte sind gegeben es wird nur überschrieben.
Kannst du mir zeigen wie das ausschauen muss?

OK, habs kappiert.

einfach anstatt void,

   {
      System.out.println("Auto fährt von " + standort + " nach " + Ziel + " " + Entfernung + " km");
      standort = Ziel;
      kmStand += Entfernung;
      return kmStand;
      }
    }```

Ich Danke Dir ganz herzlich für deine Hilfe!
Ein Super Board hier!
Wie gesagt ich bin absoluter Anfänger.
Versuche es mir selber beizubringen.
Gut Ding will weile haben.

Vielen Dank!

Jetzt hab ich doch noch ein Problem.

und zwar hab ich das Gefühl, dass der Neue kilometerstand nicht übertragen wird. Die Werte bleiben gleich.
Wie kann ich es machen, dass er nach der Reise gleich der aktuelle Kilometerstand und Standort der jeweiligen Autos angezeigt wird?

Hier mal der Code von AutoTest2:

class AutoTest2
{
   public static void main (String args[])
   {
      // Erzeugen von Objekten der Klasse ErweitertesAuto
      ErweitertesAuto Auto1 = new ErweitertesAuto("Matthias","VW Bora","grau",2002,125,897545);
      ErweitertesAuto Auto2 = new ErweitertesAuto("Sascha","VW Polo","rot",1998,55,457878);
      ErweitertesAuto Auto3 = new ErweitertesAuto("Jasmin","Opel Corsa","schwarz",2005,45,321123);

      // Erweitern der Objekte
      Auto1.standort = "Nuernberg";
      Auto2.standort = "Fuerth";
      Auto3.standort = "Stein";
      Auto1.fahrgestellnummer = 54802648;
      Auto2.fahrgestellnummer = 65842308;
      Auto3.fahrgestellnummer = 59752419;


      /** Meldung bzw. Ausgabe
            *Auto1.meldung();
            *System.out.println("Das Fahrzeug ist " + age1 + " Jahre alt.");
            *Auto2.meldung();
            *System.out.println("Das Fahrzeug ist " + age2 + " Jahre alt.");
            *Auto3.meldung();
            *System.out.println("Das Fahrzeug ist " + age3 + " Jahre alt.");
            */

            // Zusatz Aufgabe Teil 2, Ausgabe
            Auto1.alleDatenAusgeben();
            Auto2.alleDatenAusgeben();
            Auto3.alleDatenAusgeben();

            /** Werte zuweisen -> so falsch!!!
            *Auto1.besitzer = "Matthias";
            *Auto1.autotyp = "VW Bora";
            *Auto1.farbe = "grau";
            *Auto1.erstzulassung = 2002;
            *Auto1.leistung = 125;
            *Auto1.kmStand = 897545;
            *
            *Auto2.besitzer = "Sascha";
            *Auto2.autotyp = "VW Polo";
            *Auto2.farbe = "rot";
            *Auto2.erstzulassung = 1998;
            *Auto2.leistung = 55;
            *Auto2.kmStand = 457878;
            *
            *Auto3.besitzer = "Jasmin";
            *Auto3.autotyp = "Opel Corsa";
            *Auto3.farbe = "schwarz";
            *Auto3.erstzulassung = 2005;
            *Auto3.leistung = 45;
            *Auto3.kmStand = 321123;
            */

         // Ausführung der Methode faehrtnach mit dem
         // Setzen der Parameter ziel und entfernung
         Auto1.faehrtNach("Luebeck",670);
         Auto2.faehrtNach("Nuernberg",10);
         Auto3.faehrtNach("Muenchen",210);
     }  // hier möcht ich den Neuen Standort und die Kilometerzahl stehen haben.
}

wie sieht denn deine faehrtNach Methode aus?


   public int faehrtNach(String Ziel, int Entfernung){
      System.out.println("Auto fährt von " + standort + " nach " + Ziel + " " + Entfernung + " km");```

Darunter haben wir ja gleich

```  standort = Ziel;
          kmStand += Entfernung;
          return kmStand;```
Der Kilometerstand und Standort müsste doch aktualisiert sein.

Kann ich es so machen?
```    // Ausgabe ankunftIn

   public int ankunftIn() {
      System.out.println("Auto ist in " + standort + " angekommen" "der neue Kilometerstand betraegt " + kmStand +".");```

in der Methode musst du jetzt die Variablen setzen, weil wenn du sie nur ausgibst verfallen die Werte direkt nach der Methode