# Autovermietung als Klassen



## Spin (17. Jan 2009)

Hallo, ich habe die Aufgaben bekommen, die ich als Anhang hochlade. Dazu habe ich eine kleine Frage und möchte nachher den code hochladen den ich geschrieben habe.

s11.directupload.net/file/d/1677/u6opxeyj_jpg.htm
2 Seite



Kann mir mal jemand bitte erklären, was die Aufgabe 5 beschreibt. Also Objektarray von 10 Elementen.

Aber nur 5 Objekte?

?

Seite 2 ist die Aufgabenstellung 5, danke


----------



## Templon (17. Jan 2009)

Ich denke, dass ist so gemeint:


```
Erweitertes[] autos = new ErweitertesAuto[10]; // Länge 10
// und jetzt 5 Autos instanzieren
```


----------



## Spin (17. Jan 2009)

Ja soweit war ich schon, aber danke 

Aber warum ein Array von 10, wenn ich nur 5 Objekte instanzieren soll?


also das würde ja dann so gehen :

auto[0] = new Autoverwaltung()
.
.
.


Und in die Klammer meine Eingaben , die sich dann auf den Konstzruktor beziehen.

Und wie kann man von einer Klasse mehrer Klassen zuweisen.

public class x extends y extends z {}?


----------



## hdi (17. Jan 2009)

Multiple Vererbung geht in Java nicht. Lösen tut man das über Interfaces:


```
class extends Vater1 implements Vater2
```
Interfaces kann man nämlich theoretisch unendlich viele implementieren.



> Aber warum ein Array von 10, wenn ich nur 5 Objekte instanzieren soll?


Weil du _zur Laufzeit_ vllt noch weitere 5 machen willst? (Bzw. der User) Is ja egal, besser zu viel Platz als zu wenig.

Und nur damit das klar ist: Bevor du sowas wie


```
auto[0] = new Autoverwaltung()
```

machen kannst, musst du erstmal dein Array instantiieren. Du kannst ja nicht an Stelle 0 von NICHTS etwas
einfügen. Klar oder?


----------



## Guest (27. Jan 2009)

Hallo, ich arbeite jetzt schon länger an meinen Programm und komme nicht weiter. Ich bitte euch mir ein paar Tipps zu geben, wie ich nun weiter machen könnte. Ich verlange keine Quelltexte, denn das ist meine aufgabe.


Bedanke mich schon mal.



```
public class Autoverwaltung extends Bagger{

  BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
  static  int anzahlVermieteAutos;
  static  int gesamtFahrleistung;
  static  double durchschnittlicheFahrleistung;
  
 
  
  
  
  
  
  
  // erzeugen der 5 Objekte von Erweitrtes Auto

   String  name,vorname,auto,fahrziel;
  int alter;
  
 public String getname()
{
    return name;// Methode um den Wert der Instanzvariable zurückzugeben
}

public void setname(String name) throws IOException
{
    this.name=name;  // Methode zum Verändern der Instanzvariable
}

public int  getalter()
{
    return alter;// Methode um den Wert der Instanzvariable zurückzugeben
}

public void setalter(int alter) throws IOException
{
    this.alter=alter;  // Methode zum Verändern der Instanzvariable
}

public String getauto()
{
    return auto;// Methode um den Wert der Instanzvariable zurückzugeben
}

public void setauto(String auto) throws IOException
{
    this.auto=auto;  // Methode zum Verändern der Instanzvariable
}

public String getfahrziel()
{
    return fahrziel;// Methode um den Wert der Instanzvariable zurückzugeben
}

public void setfahrziel(String fahrziel) throws IOException
{
    this.fahrziel=auto;  // Methode zum Verändern der Instanzvariable
}
  
  public Autoverwaltung()
  {}
  public Autoverwaltung(String fahrer, String autotyp, String farbe,
                           int erstzulassung, int leistung, int kmstand,
                           String standort, int fahrgestellnummer, String ausruestung)
  {
      super(fahrer,autotyp,farbe,erstzulassung,leistung,kmstand, standort, fahrgestellnummer,ausruestung);
  }


public void Fahrezugentscheidung() throws IOException
{
   System.out.println("Sie haben sich dazu entschieden ein Fahrzeug auszuleihen");
   System.out.println("Wählen Sie nun zwischen [1]Auto oder [2]Bagger");
   int zahl = Integer.parseInt(eingabe.readLine());
   switch(zahl)
   {
       case 1: System.out.println("Welches dieser Autos möchten Sie sich ausleihen?");
       // info methode von autos
       break;
       
       case 2: System.out.println(" Ihnen stehen ein Bagger mit Bohrer oder ein Bagger mit" +
               "Schaufel zu Verfügung.");
       
       // info method vom bagger
       break;
   }
}



 public static void vermietung() throws IOException
    {
     System.out.println("Sie haben sich dazu entschieden ein Fahrzeug auszuleihen");
     //Daten vom Fahrer
     BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
     String name,vorname, Geburtsort, fahrziel;
     int alter;
      
     System.out.println("Füllen Sie nun folgendes Formular aus: "+
            "Name : " );
      name = eingabe.readLine();
      System.out.println(
            "Vorname : " );
      vorname = eingabe.readLine();
      System.out.println(
            "Gebortsort : " );
      Geburtsort = eingabe.readLine();
      System.out.println(
            "Alter : " );
      alter = Integer.parseInt(eingabe.readLine());


      System.out.println("Für welches Auto haben Sie sich entschieden?");
      
      
      // bei Auswahl eines Autos : Status vermietet!

      System.out.println("Geben Sie uns noch ihr gewünschtes Fahrzeil an");
      fahrziel = eingabe.readLine();
       
 }        
          
        
        
        
        
        
        
        
    

    public void dialog() throws IOException
    {
       System.out.println("Herzlich Willkommen zu Rent a Car");
       System.out.println("Wir möchte Sie gerne über unsere Angebote informieren." +
              "\n" + "Dazu drücken Sie bitte die [1]"
              );
      System.out.println("");
      System.out.println("Wenn Sie sich nun schon mit unseren Fahrezuegen auskennen " +
              "und wissen welches " +
              "Sie sich ausleihen möchten" +"\n" +",drücken Sie bitte die [2]");
      System.out.println("");
      System.out.println("Um unser Leihsystem zu beenden, drück Sie bitte die [3]");

      int zahl = Integer.parseInt(eingabe.readLine());
      switch(zahl)
        {
            case 1: Autoverwaltung info = new Autoverwaltung();
                    info.objektrun();
            
            break; 

            case 2 : Autoverwaltung.vermietung();
            break;
                    
            case 3: System.out.println("Sie haben sich dazu entschieden, das Programm zu beenden.");
                    System.exit(0);
            break;
        }
    }
        public void control()
        {
            System.out.println("Übersicht");
            
            System.out.println("Derzeit vermietete Fahrzeuge: ");
            
            System.out.println("Gesamtzahl aller Autos");

            System.out.println("Durchschnittliche Fahrleistung aller Autos");
          
        }

       
        void objektrun()
        {
         Autoverwaltung auto[] = new Autoverwaltung[10];
        auto[0] = new Autoverwaltung("Stephan", "Auto","rot",1980, 110,230000,"München",15499,"klima");
        auto[1] = new Autoverwaltung("Hans", "Auto","gelb",2001, 120,25900,"Rostock",15468,"klima");
        auto[2] = new Autoverwaltung("Matzi", "Auto","blau",2005, 89,5000,"Berlin",15426,"ABS");
        auto[3] = new Autoverwaltung("Peter", "Bagger","grün",1999, 55,100000,"Hamburg",33256,"Schaufel");
        auto[4] = new Autoverwaltung("Leni", "Auto","silber",2000, 205,50000,"Trier",15487,"klima");
        for(int i=0; i<10;i++)
        {
         System.out.println("Fahrer: " + auto[i].getFahrer() +
                      "\n"+ "Fahrzeugtyp: " + auto[i].getAutotyp() +
                      "\n"+ "Farbe des Autos: " + auto[i].getFarbe() +
                      "\n"+ "Erstzulassung: " + auto[i].getErstzulassung() +
                      "\n"+ "Leistung: " + auto[i].getleistung() + "ps" +
                      "\n"+ "Kilometerstand: " + auto[i].getKmStand()  + "km" +
                     "\n"+  "Standort " + auto[i].getstandort() +
                     "\n"+  "Fahrgestellnumer" + auto[i].getfahrgestellnummer() +
                     "\n"+  "Ausruestung" + auto[i].getname());
        
  
        }
        }
        
        
        public static void main(String[] args) throws IOException
        {
            

        /* Ablauf der gesamten Autovermietung*/
        
         Autoverwaltung a = new Autoverwaltung();
         
         a.dialog();  // Vermietungsvorgang

}

}
```






Ich habe ein Objekt array das 10 lang sein soll. Das habe ich gemacht und es soll mit 5 Werten gefüllt werden.

Durch die Initiallisierung durch den Konstruktor, hat mein einzelnes Objekt eine bestimmte länge.

Nun soll ich innerhlab der dialog methode eine while shleife einbauen, so dass sich das programm nicht beendet. In der Methode hat der benutzer die mgl, zwischen info() und Vermieten() zu wählen.

Die freien Autos sollen in info angezeit werden. Wenn man sich ein auto mieten möchte, dann sollen fahrzeugdaten und fahrerziel entgegengenommen werden und das auto welches gewählt wurde, hat den status: vermietet.

Die Methode contol() soll eine Übersicht der vermieteten und freien Autos darstellen sowie die gesamtzahl der autos, die gesamte fahrleistung und die durchschnittliche leistung pro auto.


Ich komme leider gerade echt nicht weiter .......

danke, gruß spin


----------



## ARadauer (27. Jan 2009)

deine Autoverwaltung ist ein Bagger und macht dialog... ;-)

sorry aber ich weiß nicht ob du dir nicht lieber ein anderes Fachgebiet suchen sollst...


----------



## ARadauer (27. Jan 2009)

war nicht böse gemeint, hab kopfweh drum könnte ich ein wenig unsympatisch rüber kommen ;-)


----------



## Guest (27. Jan 2009)

Würde ich gerne , aber ich wechsel den studiengang nicht wegen einen Fach.

Das wäre unsinnig, meine stärken leigen im design und das programmieren gehört nun einfach mal dazu.

Dazu einfach paar tipps, ich schreibe die klasse nochmal neu , denke ich , muss die bis zum 31 abgegeben haben, und erhoffe hier paar tipps.


Entweder bekomme ich hier paar Infos oder nicht . Ich versuche mich ja nebenbei selbst.
Ich habe bloß echt probleme damit . Weiß ich nicht warum. Irgendwie ist das proggen nicht so einfach wie ich anfangs dachte.


----------



## Gast (27. Jan 2009)

Ich habe echt kein Problem mit euren Kommentaren, doch bin ich auf etwas hilfe angewiesen.


----------



## ARadauer (27. Jan 2009)

ok dann schaun wir mal:

public class Autoverwaltung extends Bagger{ 

warum?


----------



## Guest (27. Jan 2009)

Vielen dank, das du dir die zeit nimmst.


```
// Klasse Autoverwaltung
public class Autoverwaltung extends ErweitertesAuto{

/* Die Klasse Autoverwaltung besitzt die Klassenvariablen */
  static  int anzahlVermieteAutos; // dadurch anzahl der Autos jederzeit verfügbar
  static  int gesamtFahrleistung;
  static  double durchschnittlicheFahrleistung;
 
  /*Konstruktor der Autoverwaltung*/
  public Autoverwaltung()
  {}
  
  /*überladener Konstruktor*/
  public Autoverwaltung(String fahrer, String autotyp, String farbe,
                           int erstzulassung, int leistung, int kmstand,
                           String standort, int fahrgestellnummer)
  {
      // übernhemen der Konstruktorinitialisierung von Erweitertes Auto
      super(fahrer,autotyp,farbe,erstzulassung,leistung,kmstand,
              standort,fahrgestellnummer);
     
  }
   
   
   public static void main(String[] args) throws IOException
        {
       /*Deklarieren des Objektarrays*/
       /*Das Array soll mit Objekten aus Erweitertes Auto gefüllt werden
         Die Länge sei 10*/
        ErweitertesAuto auto[] = new ErweitertesAuto[10];
        /* */
        auto[0] = new Autoverwaltung("Stephan", "Auto","rot",1980, 110,230000,"München",15498);
        auto[1] = new Autoverwaltung("Hans", "Auto","gelb",2001, 120,25900,"Rostock",15468);
        auto[2] = new Autoverwaltung("Matzi", "Auto","blau",2005, 89,5000,"Berlin",15426);
        auto[3] = new Autoverwaltung("Peter", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
        auto[4] = new Autoverwaltung("Leni", "Auto","silber",2000, 205,50000,"Trier",15487); 

         
    

}
```




Ich habe die Aufgabe falsch gelesen. 

PS: Ganz oben sind die beiden links für die aufgaben blätter an dem wir hier knobeln.


Nun habe ich den Konstruktor von meinen Erweiterten Auto abgeleitet und ich kann ihn hier verwenden.
Ich habe nun ein Objektarray erstellt, mit festgelegten werten.

Das Objektarray soll eigentlich statisch sein. Jedoch kommt es dann nicht hin im der Initiallisierung.
Mhh, da weiß ich den ansatz nicht.



Dann versuche ich nochmal neu meinen statischen vermietungsvorgang.



```
public class ErweitertesAuto extends EinfachesAuto {

   /*Überprüfung Zugriff*/
   // Methoden in der Abgeleiteten Testklasse können durch Objekt aufgerufen werden (public)
   // Private deklarierte Variablen können hier nicht aufgerufen werden
   // Entwicklungsumgebung zeigt einen durch Objekt (Punktnotation) , alle verfügbare werte + Methoden
    
    
    
 
    
    
    
    
    
   private String standort;
   private long fahrgestellnummer;
    
    
    ErweitertesAuto()
    {}

    public ErweitertesAuto(String fahrer, String autotyp, String farbe,
                           int erstzulassung, int leistung, int kmstand,
                           String standort, int fahrgestellnummer)
    {
        // Aufruf des Konstruktors der Superklasse
        super(fahrer,autotyp,farbe,erstzulassung,leistung,kmstand);
        this.fahrgestellnummer=fahrgestellnummer;
        this.standort=standort;
    }

    //überschriebende Methode Info ( alle Attribute)
    public void info()
    {
        ErweitertesAuto a = new ErweitertesAuto();
        System.out.println("Fahrer: " +  a.getFahrer()+
                           "Autotyp: " + a.getAutotyp() +
                           "Farbe des Autos: " + a.getFarbe() +
                           "Erstzulassung: " + a.getErstzulassung() +
                           "Leistung: " + a.getleistung() +
                           "Kilometerstand: " + a.getKmStand() +
                           "Standort " + a.getstandort() +
                           "Fahrgestellnumer" + a.getfahrgestellnummer());
    }

    public int faehrtnach(String Ziel,int Entfernung)
    {ErweitertesAuto a = new ErweitertesAuto();

     System.out.println("Auto fährt von Lübeck nach"+ Ziel +":" +  Entfernung + "km");
      
      return  a.getKmStand();

    }
    
      
    
    public String getstandort()
{
    return standort;// Methode um den Wert der Instanzvariable zurückzugeben
}

public void setstandort(String standort)
{
    this.standort=standort;  // Methode zum Verändern der Instanzvariable
}
    
       public long getfahrgestellnummer()
{
    return fahrgestellnummer;// Methode um den Wert der Instanzvariable zurückzugeben
}

public void setfahrgestellnummer(long fgn)
{
    this.fahrgestellnummer=fgn;  // Methode zum Verändern der Instanzvariable
}
```


----------



## manuche (27. Jan 2009)

Mal ne Frage... Warum erbt die Autoverwaltung von ErweitertesAuto?
Die Autoverwaltung soll doch verwalten und nicht so sein wie ein Auto oder?

btw die Aufgabe 3 ist falsch gestellt: Es muss heissen, "erweitern sie die Klasse ErweitertesAuto um folgende Methoden:"


----------



## Guest (27. Jan 2009)

Stimmt, dann müsste ich quasi das Erweiterte Auto von der Autoverwaltung ableiten.

Aber dann sehe ich in meiner Aufgabenstellung nicht mehr richtig durch.


```
// Klasse Autoverwaltung
public class Autoverwaltung {

/* Die Klasse Autoverwaltung besitzt die Klassenvariablen */
  static  int anzahlVermieteAutos; // dadurch anzahl der Autos jederzeit verfügbar
  static  int gesamtFahrleistung;
  static  double durchschnittlicheFahrleistung;
 
  
   
   
   public static void main(String[] args) throws IOException
        {
       /*Deklarieren des Objektarrays*/
       /*Das Array soll mit Objekten aus Erweitertes Auto gefüllt werden
         Die Länge sei 10*/
        ErweitertesAuto auto[] = new ErweitertesAuto[10];
        /* */
        auto[0] = new ErweitertesAuto("Stephan", "Auto","rot",1980, 110,230000,"München",15498);
        auto[1] = new ErweitertesAuto("Hans", "Auto","gelb",2001, 120,25900,"Rostock",15468);
        auto[2] = new ErweitertesAuto("Matzi", "Auto","blau",2005, 89,5000,"Berlin",15426);
        auto[3] = new ErweitertesAuto("Peter", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
        auto[4] = new ErweitertesAuto("Leni", "Auto","silber",2000, 205,50000,"Trier",15487); 

         
    

}

/*statische Methode vermietung soll in der Methode dialog() aufgerufen werden und
   in einer einfachen while Schleife einen Vermietungsvorgang abbilden*/
public static void vermietung()
{
boolean fertig = true;    
while(!fertig)
{
   System.out.println("Sie haben sich dazu entschieden ein Fahrezug bei uns zu mieten.");
   System.out.println("");
   System.out.println("Bitte wählen Sie aus, welches Fahrzeug es sein soll:");
   
   // Fahrzeuge vorstellen quasi das Array vom Objekt hier angeben
   // ausgewählte Fahrzeug muss dann Zustand vermietet bekommen
   
   System.out.println("Sie haben ............ausgewählt");
}   
    
}
    

  
/* Methode Dialog soll Methode vermietung aufrufen und dem Benutzer die mgl.
 geben zwischen vermieten und info auszuwählen*/
void dialog()
{ 
    System.out.println("Herzlich Willkommen zu Fahrzeugvermietung");
    System.out.println("Wählen Sie nun zwischen " 
            +"\n" +"[1]Informationen über Fahrzeuge" 
            +"\n" +"[2]Fahrzeug ausleihen" 
            +"\n" +"[3]Programm beenden");
}
    
}
```



Habe es nun so gemacht.

Versuche nun in der vermietungsmethode eine for schleife für die ausgabe des Objektarrys zu bauen.

Damit der Benutzer, vor auswahl eines Autos auch alle einsehen kann.


----------



## ARadauer (27. Jan 2009)

> das Erweiterte Auto von der Autoverwaltung ableiten.



nein

ist ein Erweitertes Auto eine Autoverwaltung? nein! 



> Nun habe ich den Konstruktor von meinen Erweiterten Auto abgeleitet und ich kann ihn hier verwenden.



ich glaube du leitest ab, damit du auf member zugreifen kannst. dabei verstehst du aber nicht, dass du durch ableiten einen typ erweiterst. eine katze ist ein Säugetier und ein Säugetier ist ein Tier. Aber eine Katze ist keine Zoohandlung und eine Zoohandlung ist schon gar keine Katze auch wenn die zoohandlugn katzen hat bzw auf katzen zugreifen will ;-)


----------



## manuche (27. Jan 2009)

Wie wär es, wenn die Autoverwaltung eine eigene Klasse ist ohne von einem Auto zu erben?
Du musst dir das Schlüsselwort "extends" wie ein "ist ein(e)" vorstellen...
Also ErweitertesAuto "ist eine" Autovermietung passt da nicht ganz...
Auch Autovermietung ist ein ErweitertesAuto wird nicht ganz hinhauen, oder? 
Allerdings ErweitertesAuto ist ein EinfachesAuto passt da schon eher... Du erweiterst quasi deine Basisklasse EinfachesAuto um ein paar Eigenschaften und Methoden und raus kommt ein ErweitertesAuto!

edit: Genial ARadauer  hat mich herzlich amüsiert ^^


----------



## ARadauer (27. Jan 2009)

Spin poste mal alle Klassen die du bis jetzt geschrieben hast, ich schau mir mal das ganze in Eclipse an...


----------



## Guest (27. Jan 2009)

Ok, ich denke dass ich es nun verstanden habe.

Meine Autoverwaltung hat die Aufgabe Autos / Fahrzeuge zu verwalten.

Wie ihr seht initialisier ich hier in der Autoverwaltung meine Erweiterten Autos.

Nach dem ich sie selbst beschrieben habe, möchte ich dem User die Möglichkeit geben eines von dennen zu wählen.
Derzeit überlege ich wie ich dem Benutzer eine Möglichkeit geben zwischen 1-5 zu geben nachdem er alle Fahrzeuge ausgegeben hat.


Also 1) Ausgabe der Fahrzeuge.

2) Wahl zwischen den Fahrzeugen

3) Bei Wahl von 1 - 5 .....also wenn er nun die 1 wählt ( muss das Auto den status vermietet bekommen.)

Dieser status , muss ich das in einer extra methode machen?


Soweit bin ich nun :

(ändere es immer...nach euren anweisungen / kommentaren.)


```
public class Autoverwaltung {

/* Die Klasse Autoverwaltung besitzt die Klassenvariablen */
  static  int anzahlVermieteAutos; // dadurch anzahl der Autos jederzeit verfügbar
  static  int gesamtFahrleistung;
  static  double durchschnittlicheFahrleistung;
 
  
   
   
   public static void main(String[] args) throws IOException
        {
       
}

/*statische Methode vermietung soll in der Methode dialog() aufgerufen werden und
   in einer einfachen while Schleife einen Vermietungsvorgang abbilden*/
public static void vermietung()
{
boolean fertig = true;    
while(!fertig)
{
   System.out.println("Sie haben sich dazu entschieden ein Fahrzeug bei uns zu mieten.");
   System.out.println("");
   System.out.println("Bitte wählen Sie aus, welches Fahrzeug es sein soll:");
   
   Autoverwaltung auswahlAuto = new Autoverwaltung();
  
   auswahlAuto.Objekttarray();
   
   // Ausgabe der Fahrzeuge:
   
   
   // Fahrzeuge vorstellen quasi das Array vom Objekt hier angeben
   // ausgewählte Fahrzeug muss dann Zustand vermietet bekommen
   
   System.out.println("Sie haben ............ausgewählt");
}   
    
}
    

  
/* Methode Dialog soll Methode vermietung aufrufen und dem Benutzer die mgl.
 geben zwischen vermieten und info auszuwählen*/
void dialog() throws IOException
{ 
    System.out.println("Herzlich Willkommen zu Fahrzeugvermietung");
    System.out.println("Wählen Sie nun zwischen " 
            +"\n" +"[1]Informationen über Fahrzeuge" 
            +"\n" +"[2]Fahrzeug ausleihen" 
            +"\n" +"[3]Programm beenden");
    
    // EinleseStream
    BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
    int zahl1 = Integer.parseInt(eingabe.readLine());
    
    // Auswahlschleife
    switch(zahl1)
    {
        case 1:     
        break;
        case 2:
        break;
        case 3:
        break;
        default: System.out.println("Fehler");
            
    }
            
}
    

public void Objekttarray()
{
    /*Deklarieren des Objektarrays*/
       /*Das Array soll mit Objekten aus Erweitertes Auto gefüllt werden
         Die Länge sei 10*/
        ErweitertesAuto auto[] = new ErweitertesAuto[10];
        /* */
        auto[0] = new ErweitertesAuto("Stephan", "Auto","rot",1980, 110,230000,"München",15498);
        auto[1] = new ErweitertesAuto("Hans", "Auto","gelb",2001, 120,25900,"Rostock",15468);
        auto[2] = new ErweitertesAuto("Matzi", "Auto","blau",2005, 89,5000,"Berlin",15426);
        auto[3] = new ErweitertesAuto("Peter", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
        auto[4] = new ErweitertesAuto("Leni", "Auto","silber",2000, 205,50000,"Trier",15487); 

        for(int i=0; i<10;i++)
        {
         System.out.println("Fahrer: " + auto[i].getFahrer() +
                      "\n"+ "Fahrzeugtyp: " + auto[i].getAutotyp() +
                      "\n"+ "Farbe des Autos: " + auto[i].getFarbe() +
                      "\n"+ "Erstzulassung: " + auto[i].getErstzulassung() +
                      "\n"+ "Leistung: " + auto[i].getleistung() + "ps" +
                      "\n"+ "Kilometerstand: " + auto[i].getKmStand()  + "km" +
                     "\n"+  "Standort " + auto[i].getstandort() +
                     "\n"+  "Fahrgestellnumer" + auto[i].getfahrgestellnummer());
    
        }
}


}
```


Habe hier ne Methode für das Objekt array geschrieben. Weiß sonst nicht wie ich das Array anders ausgeben soll.


----------



## ARadauer (27. Jan 2009)

ich brauch alle deiner Klassen... ErweitertesAuto
EinfachesAuto...


----------



## Guest (27. Jan 2009)

Boah ich wäre dir sehr sehr dankbar , wenn du mir da hilfst. Ich könnt echt heulen, denn es klappt nichts 


1 Klasse :


```
public class EinfachesAuto {
    
    // Variablen der Klasse
     private String fahrer,autotyp,farbe;
     private int erstzulassung, leistung ,kmstand;
     protected int jahr=2008;
   
  /*Konstruktor sind Initialisierungsroutinen, die automatisch beim Erzeugen eines Objektes
   * ausgeführt werden*/

    // Standartkonstruktor
    public EinfachesAuto()
    {}
    
    //überladener Konstruktor von EinfachesAuto ( Super/Vaterklasse)
    // für Objekt Speicherplatz zu Verfügung gestellt und Objekt initiallisiert
    public EinfachesAuto(String fahrer, String autotyp, String farbe,
                        int erstzulassung, int leistung, int kmstand)
    {
        this.fahrer=fahrer;
        this.autotyp=autotyp;
        this.farbe=farbe;
        this.erstzulassung=erstzulassung;
        this.leistung=leistung;
        this.kmstand=kmstand;
        
        

        
    }
    
public void print()
{
    System.out.print("Herzlich Willkommen zu ihrer Autovemietung!");
    System.out.println("Das");

}
public void info()
{   EinfachesAuto a = new EinfachesAuto();
    System.out.println("Farbe des Autos: " + a.getFahrer()+ " Fahrer: " + a.getFarbe() );
}




/* set und get Methoden, um einen kontrollierten Zugriff auf die Objekte zu erlauben
 * Da die Variablen private sind brauchen wir set und get um auf diese zugreifen zu können
 *
 * Damit unsere Attribute nicht irgendein Wert annehmen brauchen wir ein Konstruktor
 * (wird beim Instanziieren einer Klasse aufgerufen)*/



public String getFahrer()
{
    return fahrer;// Methode um den Wert der Instanzvariable zurückzugeben
}

public void setFahrer(String fahrer)
{
    this.fahrer=fahrer;  // Methode zum Verändern der Instanzvariable
}
        
public int alter(int alter)
{
    return (jahr - erstzulassung);
}


public void setAutotyp(String autotyp){
this.autotyp = autotyp;
}

public String getAutotyp() {
return autotyp;
}

public void setFarbe(String farbe){
this.farbe = farbe;
}

public String getFarbe() {
return farbe;
}

public void setErstzulassung(int erstzulassung) {
    if (erstzulassung >= 1900 && erstzulassung < 2100) {
        this.erstzulassung = erstzulassung;
    }
}

public int getErstzulassung() {
return erstzulassung;
}

public void setleistung(int leistung){
this.leistung = leistung;
}

public int getleistung() {
return leistung;
} 




public void setKmStand(int kmstand){
this.kmstand = kmstand;
}

public int getKmStand() {
return kmstand;
} 




}
```



Ich denke dass ich das mit den get und set verstanden habe. Es hat sich zum Standart entwickelt Variablen private zu modifizieren.

Man kann also die Variablen in anderen Klassen nur mit Hilfe von set und get aufrufen und bearbeiten. Simit ist einen Klassensichherheit gegeben.




2.Klasse:



> public class EinfachesAutoTest {
> 
> /**
> * @param args the command line arguments
> ...




In dieser Testklasse, Instanziiere ich eine EinfachesAuto Objekt. Weise dem Konstruktor in der Klasse EinfachesAuto werte zu. Diese Werden denn in einfaches Auto den set und get Methoden übergeben und ich kann sie nun hier in der main des EinfachenAutoTest prüfen.




Klasse: Erweitertes Auto:



> public class ErweitertesAuto extends EinfachesAuto {
> 
> /*Überprüfung Zugriff*/
> // Methoden in der Abgeleiteten Testklasse können durch Objekt aufgerufen werden (public)
> ...




In der Klasse erbe ich nun das Einfache Auto und erweitere den Konstruktor.
Schreibe noch paar Methoden.


Überschreibe ich hier eigentlich die Daten , des Einfachen Autos?
Wenn ich die Klasse ableite, dann übernehme ich doch Variablen und Metoden.

In der Subklasse kann ich doch nun mehr Variablen und Methoden hinzufügen. Kann ich auch die , der Vaterklasse überschreiben?

(ich bin da gerade ein wenig durcheinander.)


vielen dank an jeder der mir helfen kann!
gruß spin


----------



## manuche (27. Jan 2009)

Schau dir mal in Aufgabe 5 den zweiten Absatz an... Das Array kannst du dann auch in deiner main-Methode mit Werten belegen!

Anmerkung am Rande:
- Methoden und Variablen schreibt man IMMER klein!!!
- Schau dir in Zusammenhang mit dem Einlesen von der Konsole mal die Klasse Scanner an...

*edit: Du überschreibst sie nicht... Allerdings musst du darauf achten, dass du aus der ableitenden Klasse keine mit private deklarierten Methoden und Membervariablen der Basisklasse siehst... Wenn du die getter bzw setter für diese Membervariablen allerdings schon in der Basisklasse deklariert hast kannst du normal auf sie zu greifen!
Es kommt halt auf das Umfeld an, in welchem du dich befindest!


----------



## Spin (27. Jan 2009)

Aber wenn ich diese in der main mache , wie kann ich denn mit meiner statischen vermietungsmethode darauf zu greifen?



Ja, ich arbiete dran variablen und Methodennamen klein zuschreiben.

Und Scanner kenne ich.

Scanner a = new Scanner(System.in)

a.nextInt ....usw.

Paket: util

Doch irgendwie haben wir uns das als Kurs angewöhnt BufferedReader zu nutzen. Ich weiß nicht warum und welches besser ist.


----------



## ARadauer (27. Jan 2009)

ich nehm BufferedReader 



> wie kann ich denn mit meiner statischen vermietungsmethode darauf zu greifen





> Dekalreieren Sie in Autoverwaltung ein statisches Objektarray autos[]


----------



## ARadauer (27. Jan 2009)

```
package autoz;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Autoverwaltung { 

   /* Die Klasse Autoverwaltung besitzt die Klassenvariablen */ 
   static  int anzahlVermieteAutos; // dadurch anzahl der Autos jederzeit verfügbar 
   static  int gesamtFahrleistung; 
   static  double durchschnittlicheFahrleistung; 

   static ErweitertesAuto autos[] = new ErweitertesAuto[10]; 




   public static void main(String[] args) throws IOException {
      autos = new ErweitertesAuto[10]; 
      /* */ 
      autos[0] = new ErweitertesAuto("Stephan", "Auto","rot",1980, 110,230000,"München",15498); 
      autos[1] = new ErweitertesAuto("Hans", "Auto","gelb",2001, 120,25900,"Rostock",15468); 
      autos[2] = new ErweitertesAuto("Matzi", "Auto","blau",2005, 89,5000,"Berlin",15426); 
      autos[3] = new ErweitertesAuto("Peter", "Bagger","grün",1999, 55,100000,"Hamburg",33256); 
      autos[4] = new ErweitertesAuto("Leni", "Auto","silber",2000, 205,50000,"Trier",15487); 

      dialog();


   } 

   /*statische Methode vermietung soll in der Methode dialog() aufgerufen werden und 
      in einer einfachen while Schleife einen Vermietungsvorgang abbilden*/ 
   public static void vermietung() 
   { 
      boolean fertig = true;    
      while(!fertig) 
      { 
         System.out.println("Sie haben sich dazu entschieden ein Fahrzeug bei uns zu mieten."); 
         System.out.println(""); 
         System.out.println("Bitte wählen Sie aus, welches Fahrzeug es sein soll:"); 


         System.out.println("Sie haben ............ausgewählt"); 
      }    

   } 



   /* Methode Dialog soll Methode vermietung aufrufen und dem Benutzer die mgl. 
   geben zwischen vermieten und info auszuwählen*/ 
   static void  dialog() throws IOException 
   { 
      System.out.println("Herzlich Willkommen zu Fahrzeugvermietung"); 
      System.out.println("Wählen Sie nun zwischen " 
            +"\n" +"[1]Informationen über Fahrzeuge" 
            +"\n" +"[2]Fahrzeug ausleihen" 
            +"\n" +"[3]Programm beenden"); 

      // EinleseStream 
      while(true){
         BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); 
         int zahl1 = Integer.parseInt(eingabe.readLine()); 

         // Auswahlschleife 
         switch(zahl1) 
         { 
         case 1:    
            info();
            break; 
         case 2: 
            vermietung();
            break; 
         case 3: 
            System.exit(-1);
            break; 
         default: System.out.println("Fehler"); 
         } 
      }

   } 

   public static void info(){
      for(int i = 0; i < autos.length; i++){
         System.out.println("Auto: "+(i+1)+"\t");
         if(autos[i]!=null){            
            autos[i].info();
         }else{
            System.out.println("leer");
         }
      }
   }




}
```
so für den anfang.. ich finds schade, ihr habt da so super objektorientierte beispiele und dann seh ich in 
EinfachesAuto sowas


```
public void info() 
{   EinfachesAuto a = new EinfachesAuto(); 
   System.out.println("Farbe des Autos: " + a.getFahrer()+ " Fahrer: " + a.getFarbe() ); 
}
```
hallo? ein bisschen mitdenken könnte man schon! Nicht nur das machen was andere sagen bringt wenig du musst schon überlegen, warum man das so macht.


----------



## Spin (27. Jan 2009)

```
public void info()
{   
    System.out.println("Farbe des Autos: " + this.getFahrer()+ " Fahrer: " + this.getFarbe() );
}
```


Ah , das macht mehr sinn.

Das Objekt welches nun diese Methoden aufruft , übergibt seine werte an ihn.

Das Mitdenken fiel mir gerade etwas schwer.
Ich versuche nun weiter zu machen. Bedanke mich erstmal. Wird wohl nicht lange dauern, dann poste ich wieder . Oh man. Ich komme echt nicht klar mit dem zeitdruck!


----------



## manuche (27. Jan 2009)

Das packst du schon! 
Wenn du es jetzt verstehst is doch schonmal eine gute Grundlage!


----------



## Spin (28. Jan 2009)

Nach ein paar stunden pause , habe ich mal versucht weiter zu machen.



```
public class Autoverwaltung {

   /* Die Klasse Autoverwaltung besitzt die Klassenvariablen */
   static  int anzahlVermieteAutos; // dadurch anzahl der Autos jederzeit verfügbar
   static  int gesamtFahrleistung;
   static  double durchschnittlicheFahrleistung;
   static int zahl2;
 

   static ErweitertesAuto autos[] = new ErweitertesAuto[10];




   public static void main(String[] args) throws IOException {
      autos = new ErweitertesAuto[10];
      /* */
      
      if(autos[]){
      autos[0] = new ErweitertesAuto(" ", "Auto ","rot",1980, 110,230000,"München",15498);
      autos[1] = new ErweitertesAuto("", "Auto","gelb",2001, 120,25900,"Rostock",15468);
      autos[2] = new ErweitertesAuto("", "Auto","blau",2005, 89,5000,"Berlin",15426);
      autos[3] = new ErweitertesAuto("", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
      autos[4] = new ErweitertesAuto("", "Auto","silber",2000, 205,50000,"Trier",15487);
      }
      dialog();


   }

   /*statische Methode vermietung soll in der Methode dialog() aufgerufen werden und
      in einer einfachen while Schleife einen Vermietungsvorgang abbilden*/
   public static void vermietung() throws IOException
   {
      
      {  
          System.out.println("Sie haben sich dazu entschieden ein Fahrzeug bei uns zu mieten.");
          System.out.println("");
          System.out.println("Bitte wählen sie nun zwischen eins unserer Autos:");
          info();
          BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
          zahl2 = Integer.parseInt(eingabe.readLine());
         
          System.out.println("Bitte geben Sie Ihre Daten ein"
                 +"\n" + " Vorname: ");
         autos[zahl2-1].setFahrer(eingabe.readLine());

         System.out.println("Bitte geben Sie an wohin sie fahren möchten");
         autos[zahl2-1].setstandort(eingabe.readLine());

         
         
         switch (zahl2)
         {
             case 1: print();
                     autos[0].info();
                     autos[0].ausgeliehen = true;

             break;
                     

             case 2: print();
                     autos[1].info();
             break;
             case 3: print();
                     autos[2].info();
                     break;
             case 4: print();
                     autos[3].info();
                     break;
              case 5: print();
                     autos[4].info();
                     break;

             default:System.out.println("Fehler");
         }
                 
         
        
         

         System.out.println("Sie haben ............ausgewählt");
      }

   }



   /* Methode Dialog soll Methode vermietung aufrufen und dem Benutzer die mgl.
   geben zwischen vermieten und info auszuwählen*/

  static void print()
   {
       System.out.println("Sie haben sich für Auto:" +  zahl2  + " entschieden"
               + "mit den folgenden Fahrzeugdaten");   }


   static void  dialog() throws IOException
   {
     boolean fertig = false;
     while(!fertig){
      System.out.println("Herzlich Willkommen zu Fahrzeugvermietung");
      System.out.println("Wählen Sie nun zwischen "
            +"\n" +"[1]Informationen über Fahrzeuge"
            +"\n" +"[2]Fahrzeug ausleihen"
            +"\n" +"[3]Programm beenden");

      // EinleseStream
    
         BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
         int zahl1 = Integer.parseInt(eingabe.readLine());

         // Auswahlschleife
         switch(zahl1)
         {
         case 1:
            info();
            break;
         case 2:
            vermietung();
            break;
         case 3:
            System.exit(-1);
            break;
         default: System.out.println("Fehler");
         }
      }
   System.out.println("Bitte geben Sie [1] ein um zum Anfang des Programms zu kommen. ");
   
   }






   public static void info(){
      for(int i = 0; i < autos.length; i++){
         System.out.println("Auto: "+(i+1)+"\t");
         if(autos[i]!=null){
            autos[i].info();
         }else{
            System.out.println("leer");
         }
      }
   

   }
```




Ich weiß nun nicht, wie ich meinen Objektarray ein booleanstatus zuweisen soll.
Wenn der User das Auto 1 gewähl hat , darf beim nächsten mal das auto nicht mehr zu verfügung stehen.
bzw. es bekommt den status : vermietet.

Kann mir dazu noch jemand einen tipp geben?


----------



## ARadauer (28. Jan 2009)

ich würde dem ErweitertesAuto einen member vermietet geben


----------



## manuche (28. Jan 2009)

Schau dir mal Zeile 7 sowie Zeile 10 und 16 an... 

Zu Zeile 7) 
Reicht es nicht die Variable zahl2 lokal in einer Methode zu deklarieren? In Java gilt das Prinzip just-in-time für Variablen!

Zu Zeile 10 und 16)
Du deklarierst in Zeile 10 deine Array vom Typ ErweitertesAuto und initialisiert es direkt. In Zeile 16 initialisierst du es wieder... Eins ist in diesem Fall überflüssig! Aus deinen Aufgaben kannst du auch herleiten welches!


----------



## ARadauer (28. Jan 2009)

ich glaub das war mein fehler...


----------



## manuche (28. Jan 2009)

Leuten mit Beerware-Lizenz sei verziehen...


----------



## ARadauer (28. Jan 2009)

Spin, Quizfrage:

Zeile10:
static ErweitertesAuto autos[] = new ErweitertesAuto[10];

Zeile16:
autos = new ErweitertesAuto[10]; 

doppelt gemoppelt, irgendwo kann man = null schreiben, wo? 10 oder 16?


----------



## Spin (28. Jan 2009)

Guten Morgen. Nach meine Aufgaben stellung lässt sich das nicht statische Objekt wieder weglöschen.

Das wäre denn in Zeile 16.



Aso , denn versuche ich mal eine private variable dem Konstruktor hinzuzufügen!



```
public void ausgeliehen(boolean ausgeliehen)
{
    this.ausgeliehen=ausgeliehen;
}

public boolean getausgeliehen()
{
    return ausgeliehen;
}
```




```
ErweitertesAuto()
    {}

    public ErweitertesAuto(String fahrer, String autotyp, String farbe,
                           int erstzulassung, int leistung, int kmstand,
                           String standort, long fahrgestellnummer, boolean ausgeliehen)
    {
        // Aufruf des Konstruktors der Superklasse
        super(fahrer,autotyp,farbe,erstzulassung,leistung,kmstand);
        this.fahrgestellnummer=fahrgestellnummer;
        this.standort=standort;
        this.ausgeliehen=ausgeliehen;
    }
```



Der Konstruktor ist doch dazu da, das Objekt zu initialisieren.
Dieser Konstruktor gehört nun der Klasse Erweitertes Auto.

Und jedes mal wenn ich ein Die Klasse Instanzziere , erstell ich ein neues Objekt in den ich werte den Variablen, im konstruktor hinzufügen kann.

Wenn ich als mein die Klasse noch irgendwoanders eine 2tes Objekt erstelle. Kann ich den mit neuen Werten füllen.










```
autos[0] = new ErweitertesAuto(" ", "Auto ","rot",1980, 110,230000,"München",15498, false);
      autos[1] = new ErweitertesAuto("", "Auto","gelb",2001, 120,25900,"Rostock",15468, false);
      autos[2] = new ErweitertesAuto("", "Auto","blau",2005, 89,5000,"Berlin",15426,false);
      autos[3] = new ErweitertesAuto("", "Bagger","grün",1999, 55,100000,"Hamburg",33256,false);
      autos[4] = new ErweitertesAuto("", "Auto","silber",2000, 205,50000,"Trier",15487,false);
```




Du meintest es dann bestimmt so. Habe ich hier die mgl. boolean einen namen zu geben, frei oder so?
Dieses false könnte ich ja nun über schreiben lassen in meiner switch schleife.


Aber nichts desto trotz , brauch ich doch eine if Bedingung welche mein Array durchsucht.
Wenn ich in meiner switch schleife , denn false wert auf true setzen lass und das programm geht danach weiter, muss ja das Auto mit true weg sein, bzw man darf es nicht mehr wählen.!

Wir lässt man denn ein Array durchsuchen?


Ich denke da an einer forschleife.

Da ich hier nur ein eindemensionales Array habe:

String gesucht = vermietet;
for(int i=0; i<position.length; i++) {
		if(position_.equals(vermietet)) {
			System.out.println(" Das Auto kan nicht mehr gemietet werden");


Aber das funktioniert ja nicht , wenn ich in meiner Liste nur true oder false stehen habe. _


----------



## manuche (28. Jan 2009)

Eine Instanz der Klasse ErtweitertesAuto beinhaltet ja ob sie vermietet ist oder nicht... du kannst einfach durch alle autos durch iterieren und abfragen:

```
for (int i = 0; i < autos.length; i++){
  if (autos[i].isVermietet()){
    System.out.println ("Auto ist bereits vermietet");
  }
}
```

Getter- und SetterMethoden für boolean Variablen heissen set- bzw is<VariablenName>....


----------



## Spin (28. Jan 2009)

```
autos[0] = new ErweitertesAuto(" ", "Auto ","rot",1980, 110,230000,"München",15498, false);
      autos[1] = new ErweitertesAuto("", "Auto","gelb",2001, 120,25900,"Rostock",15468, false);
      autos[2] = new ErweitertesAuto("", "Auto","blau",2005, 89,5000,"Berlin",15426,false);
      autos[3] = new ErweitertesAuto("", "Bagger","grün",1999, 55,100000,"Hamburg",33256,false);
      autos[4] = new ErweitertesAuto("", "Auto","silber",2000, 205,50000,"Trier",15487,false);
      for (int i = 0; i < autos.length; i++){
      if (autos[i].gvermietet()){
      System.out.println ("Auto ist bereits vermietet");
  }
```



```
switch (zahl2)
         {
             case 1: print();
                     autos[0].info();
                     autos[0].isVermietet=(true);
```

Man kan das Programm nicht einfach das machen was ich möchte -.-*

Nach Auswahl setze ich den booleantyp auf true und danach soll der einfach nicht mehr gewählt werden dürfen.
Warum kann man boolean nicht mit equals vergleichen. Was hat das für ein grund.

Ich durchsuche das array und dann geht das .....ich gleube ich mache das gleich mit einen string !

String vermietet und string frei!

Wenn man denn in meiner switch schleife eins der autos anklickt , dann stelle ich automatisch mit ein , das sich der wert für den neuen string ändert. Vielleicht ist das ja klüger .

Boolean ist echt nicht mein ding. Java ict nicht mein ding, muss es aber machen , weil es zum studium dazu gehört. grml
Lieber 2 std designmethodologie als eine std. java


----------



## ARadauer (28. Jan 2009)

> Das wäre denn in Zeile 16.


tja dann ist dein array leider null! 



> Aso , denn versuche ich mal eine private variable dem Konstruktor hinzuzufügen!
> 
> 
> 
> ...


du kennst nach 5 monaten java programmieren, den unterschied zwischen einer klasse und einem konstruktur nicht?  oder willst du den wert einfach beim erstellen mitgeben, meinst du das? würd ich nicht machen. aber egal..

getausgeliehen ?? was ist das? lasst du dir nicht von eclipse die getter und setter erstellen?




> Habe ich hier die mgl. boolean einen namen zu geben, frei oder so?
> Dieses false könnte ich ja nun über schreiben lassen in meiner switch schleife.


du hast ihn gerade ausgeliehen gennant, oder willst du false umbennen? das geht nicht!!!



> Aber das funktioniert ja nicht , wenn ich in meiner Liste nur true oder false stehen habe.


nein du hast nicht true oder fals drinnen, sondern deine autos ;-)



> if(position_.equals(vermietet)) _


_
java weiß nicht, wann ein auto gleich ist... das musst du sagen, indem du die equals methode überschreibst....




			Warum kann man boolean nicht mit equals vergleichen. Was hat das für ein grund.
		
Zum Vergrößern anklicken....

 weil es ein primitiver datentyp ist! boolean brauchst du überhaupt nicht verlgeichen,
if(a.isGeliehen()==true) ist das selbe wie if(a.isGeliehen())_


----------



## Spin (28. Jan 2009)

Ich wollte anfangs den Wert gleich mitgeben im Konstruktor, aber die überlegung ist wohl falsch.

Also dass mit vermietet kann ich vergessen. Das pack ich nicht und habe wohl pech gahabt. Ich verstehe nicht warum es nicht funktioniert. Warum er es nicht vergleicht.



Wir haben lediglich 2 std in der woche java und dazu noch einen professor, der nicht erklären kann.
Aber mir bringt es eh nicht auf irgendwen zu schimpfen, da ich ja einfach selbst dadurch muss.
 :autsch:


----------



## manuche (28. Jan 2009)

Jetzt bleib mal am Ball...  So schlecht sah es doch garnicht aus was wir schon zusammen geschustert haben!
Wie du Kennzeichnen kannst, ob ein ErweitertesAuto vermietet ist haben wir dir ja grad gesagt, versehst du das oder kommst du damit nicht klar?


----------



## ARadauer (28. Jan 2009)

gib mir geld ich mach dirs ;-)


----------



## Spin (28. Jan 2009)

Ich habe davon leider genau so wenig, wie ich ahnung von java habe.

Naja ich probiere mich 2 std, vor abgabe nochmal, wenn es dann nicht geht pech gehabt.
Auf hilfe bin ich angwiesen, jedoch bekomme ich hier wohl nur tipps, mit dennen ich leider nicht ganz so viel anfangen kann.

Es liegt ja nicht an euch sondern an mir. War wohl zu optimistisch hier einen anstaz zu bekommen, mit dem ich auf meinen Java stand was anfangen kann.


----------



## Spin (28. Jan 2009)

```
package taschenrechner;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProbeAuto {



   /* Die Klasse Autoverwaltung besitzt die Klassenvariablen */
   static  int anzahlVermieteAutos; // dadurch anzahl der Autos jederzeit verfügbar
   static  int gesamtFahrleistung;
   static  double durchschnittlicheFahrleistung;
   static int zahl2;
   static boolean vermietet =false;

   static ErweitertesAuto autos[] = new ErweitertesAuto[10];






   public static void main(String[] args) throws IOException {
      
      /* */
      
     
     
    
     
      
      autos[0] = new ErweitertesAuto(" ", "Auto ","rot",1980, 110,230000,"München",15498);
      



      autos[1] = new ErweitertesAuto("", "Auto","gelb",2001, 120,25900,"Rostock",15468);
      autos[2] = new ErweitertesAuto("", "Auto","blau",2005, 89,5000,"Berlin",15426);
      autos[3] = new ErweitertesAuto("", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
      autos[4] = new ErweitertesAuto("", "Auto","silber",2000, 205,50000,"Trier",15487);
      

    
      dialog();
      }

   

   /*statische Methode vermietung soll in der Methode dialog() aufgerufen werden und
      in einer einfachen while Schleife einen Vermietungsvorgang abbilden*/
   public static void vermietung() throws IOException
   {
      
      {  
          System.out.println("Sie haben sich dazu entschieden ein Fahrzeug bei uns zu mieten.");
          System.out.println("");
           System.out.println("Bitte waehlen sie ein Auto : 0 , 1 , 2, 3 , 4 ");
          info();
          BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
          
          zahl2 = Integer.parseInt(eingabe.readLine());
          while(vermietet){
              System.out.println("Das Auto ist gerade vermietet -                         Bitte waehlen sie ein anderes Auto! ");
          }

          while(!vermietet){
          System.out.println("Bitte geben Sie Ihre Daten ein"
                 +"\n" + " Vorname: ");
         autos[zahl2-1].setFahrer(eingabe.readLine());  // aufnahme der Fahrer daten

         System.out.println("Bitte geben Sie an wohin sie fahren möchten");
         autos[zahl2-1].setstandort(eingabe.readLine()); // Aufnahme des Fahrtziels

         
         // 5 Autos von dennen 1 gewählt wurde
         switch (zahl2)
         {
             case 1: print(); // Methode für Benutzerdialog
                     autos[0].info(); // Ausgabe des Arrays in dem nun Fahrer und Standort geändert wurde
                     vermietet=true;

             break;
                     

             case 2: print();
                     autos[1].info();
             break;
             case 3: print();
                     autos[2].info();
                     break;
             case 4: print();
                     autos[3].info();
                     break;
              case 5: print();
                     autos[4].info();
                     break;

             default:System.out.println("Fehler");
                     for (int i=1; i<autos.length; i++){
			 if (vermietet=false){
			 autos[i].info();}
                     }// Ausgabe der freien      Autos mit ihren Daten
         }
                 
         
           }
         

      }
   }



   /* Methode Dialog soll Methode vermietung aufrufen und dem Benutzer die mgl.
   geben zwischen vermieten und info auszuwählen*/

  static void print()
   {
       System.out.println("Sie haben sich für Auto:" +  zahl2  + " entschieden"
               + "mit den folgenden Fahrzeugdaten");   }


   static void  dialog() throws IOException
   {
     boolean fertig = false;
     
      System.out.println("Herzlich Willkommen zu Fahrzeugvermietung");
      System.out.println("Wählen Sie nun zwischen "
            +"\n" +"[1]Informationen über Fahrzeuge"
            +"\n" +"[2]Fahrzeug ausleihen"
            +"\n" +"[3]Programm beenden");

      // EinleseStream
    
         BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
         int zahl1 = Integer.parseInt(eingabe.readLine());

         // Auswahlschleife
         switch(zahl1)
         {
         case 1:
            info();
              

            
            break;
         case 2:
            vermietung();
            break;
         case 3:
            System.exit(-1);
            fertig=true;
            break;
         default: System.out.println("Fehler");
         }
      
   System.out.println("Bitte geben Sie [1] ein um zum Anfang des Programms zu kommen. ");
   
   }
public  static int controll(){
		System.out.println("Gesamtübersicht der Autovermietung : \n");
		    for (int i=0; i<autos.length; i++)
		    {
		      if (i<autos.length)
		        if (vermietet= true)

		      {
		        return anzahlVermieteAutos = anzahlVermieteAutos++;
		        return gesamtFahrleistung = gesamtFahrleistung + autos[i].getleistung();
		        return durchschnittlicheFahrleistung=  gesamtFahrleistung  / anzahlVermieteAutos;
		        
		      }

		    }

		}
  // Ende Klasse Autoverwaltung





   public static void info(){
      for(int i = 0; i < autos.length; i++){
         System.out.println("Auto: "+(i+1)+"\t");
         if(autos[i]!=null){
            autos[i].info();
         }else{
            System.out.println("leer");
         }
      }
   

   }
```


Ich habe mich zusammengerissen und doch nochml weiter geamcht. Kann sich das bitte npchmal jemand anschauen und mir sagen , warum und wie ich die fehler beheben kann?

Warum wird der Bollean Typ nicht überspeichert?


----------



## ARadauer (29. Jan 2009)

wieso heißt das jetzt ProbeAuto und hat einen member vermietet?

Egal was der jemand erzählt und wie schwer du es dir machst.
Es ist in wirklichkeit ganz einfach!!!!  Objekte haben Eigenschaften und Methoden. Objekte sollen Dinge in der realen Welt darstellen, gibt ausnahmen, aber wenn du deine Fachmodell schreibst sollte das so sein.

Warum hat  deine Autovermieteung die nun ProbeAuto heißt eine eigenschaft vermietet? Kann man deine ganze Autovermietung vermieten? Nein das auto muss vermietbar sein. Versteh nicht warum du es dir so schwer machst.


```
return anzahlVermieteAutos = anzahlVermieteAutos++; 
              return gesamtFahrleistung = gesamtFahrleistung + autos[i].getleistung(); 
              return durchschnittlicheFahrleistung= gesamtFahrleistung  / anzahlVermieteAutos;
```
naja das kann ja nicht stimmen oder? warum hast du bei jeder zuweisung ein return?


----------



## Spin (29. Jan 2009)

Hey ARadauer. Ich glaube nicht , dass ich zu doof für die Java Programmierung bin, sondern es daran liegt, dass ich zu wenig zeit habe mich damit exzessiv auseinander zusetzen.

Ich denke , wenn man es so wie du , fast täglich und schon jahrelang macht, ist es keine Hürde.

Die Objektorientierung ist für mich ein komplett neues Gebiet und verstehe es in der Realität. Das heißt ich kannes nach vollziehen das ein Auto nicht von der Autoverwaltung abgeleitet werden kann.

Doch in java sind mir diese reservierten wörter eine unbekanntes Geheimnis.

In wenige Büchern ist es gut erklärt und man liest es sich tausend mal durch...kein erfolg. Wo steht bitte gut erklärt: Was getter und setter sind. Nicht umsonst fragen soviel tausend von Leute nach diesen thema.



@thema

Ich habe nun boolean als member variable. Warum, damit ich es in meiner while schleife verwenden kann.
Du hattest geschrieben, dass du es nicht im Konstruktor einbauen würdest, sondern anders. Als anders habe ich es nun als Member interpretiert.

Meine Klasse heißt nun ProbeAuto, weil ich versucht habe nochmal alles zu ordnen. Der Klassenname ist ja nicht ausschlaggebend.




> Warum hat deine Autovermieteung die nun ProbeAuto heißt eine eigenschaft vermietet? Kann man deine ganze Autovermietung vermieten? Nein das auto muss vermietbar sein. Versteh nicht warum du es dir so schwer machst.




Nein man kann keine ganze Autovermietung vermieten. Das heißt also ich muss meine membervariable in mein erweitertes auto packen. Dann kann ich mit autos.membervariable das ganze aufrufen.



Ich glaube mit deinen hinweisen, verstehe ich langsam wie dass zusammenhängt.

Warum mehr return werte?
mhh, ich dachte das würde gehen. Prinzipiell glaube ich hat eine methode nur einen Rückgabewert.

Zurückgegeben werden sollen aber mehrere sachen.
	
	
	
	





```
return ((AvA = anzahlVermieteAutos++) && (Gfa = gesamtFahrleistung + autos[i].getleistung()) &&
                                 (d = gesamtFahrleistung  / anzahlVermieteAutos));
```




Man, wie gibt man denn mehrere werte zurück aus einer Methode?


----------



## Ebenius (29. Jan 2009)

Spin hat gesagt.:
			
		

> Man, wie gibt man denn mehrere werte zurück aus einer Methode?


Gar nicht.


----------



## Spin (29. Jan 2009)

Ok, danke.


Wie macht man es denn . mehrere Methoden schreiben?


```
public static int  vermieteAutos(int a)
   {   
       a =anzahlVermieteAutos++;
       return a;
   }
   public static int gesamtFahrleistung(int b)
   {   int i =0;
       b= gesamtFahrleistung + autos[i].getleistung(); 
       return b;
   }
   public static double durchschnittlicheFahrl(double c)
   {
       c =( gesamtFahrleistung  / anzahlVermieteAutos);
       return c;
   }
```


Nun lasse ich die werte in Variablen speichern.
Nun weiß ich trotzdem noch nicht wie ich die Werte aus dem Array raus hole.

Einer ne idee?


----------



## manuche (29. Jan 2009)

```
for (int i = 0; i < autos.length; i++){
  ErweitertesAuto auto = autos[i];
  if (auto != null){
    anzahlAutos++;
    if (auto.isVermietet()){
      anzahlVermieteteAutos++;
    }
  }
}
```
sowas wäre mal ein Ansatz! Denk dran, wenn die Variablen in der Klasse deklariert sind und nicht in ein Methode kannst du überall innerhalb der Klasse darauf zu greifen!


----------



## Spin (30. Jan 2009)

Danke probiere nun ne halbe std- kang aus...und er sagt immer NullPointerException. Wie kann ich denn bollean initialisieren?

Das Programm macht es einfach nicht 


```
private boolean vermietet = false;

  


public void isVermietet(boolean vermietet)
{
this.vermietet=vermietet;
}

public boolean getvermietet()
{
return vermietet;
}
```






Von der logik her muss es doch funktionieren. Ich gette den bollean typ als false und setze ihn bei case auf true.

Dann wenn true ist dann soll er vermietet ausgeben.




```
boolean fertig = false;
         while(!fertig)
         {
          System.out.println("Sie haben sich dazu entschieden ein Fahrzeug bei uns zu mieten.");
          System.out.println("");
           System.out.println("Bitte waehlen sie ein Auto : 0 , 1 , 2, 3 , 4 ");
          info();
          BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
          
          zahl2 = Integer.parseInt(eingabe.readLine());
           for (int i = 0; i < autos.length; i++){
                       if (autos[0].getvermietet()){
                       System.out.println ("Auto ist bereits vermietet");
                       }
                     }
          
          

         
          System.out.println("Bitte geben Sie Ihre Daten ein"
                 +"\n" + " Vorname: ");
         autos[zahl2-1].setFahrer(eingabe.readLine());  // aufnahme der Fahrer daten

         System.out.println("Bitte geben Sie an wohin sie fahren möchten");
         autos[zahl2-1].setstandort(eingabe.readLine()); // Aufnahme des Fahrtziels

         
         // 5 Autos von dennen 1 gewählt wurde
         switch (zahl2)
         {
             case 1: print(); // Methode für Benutzerdialog
              boolean a = true;
             autos[0].info(); // Ausgabe des Arrays in dem nun Fahrer und Standort geändert wurde
             autos[0].isVermietet(a);
```


Er gibt mir nun das Auto ist vermietet 10 mal aus. Aso weil die Länge des Arrays 10 ist?


----------



## ARadauer (30. Jan 2009)

```
for (int i = 0; i < autos.length; i++){ 
                       if (autos[0].getvermietet()){
```







also ja du gibst jetzt so oft wie die länge des array autos.length das erste fahrzeug autos[0] aus... gut, kann man machen ;-)

das mit 0 hast du gemacht, weil du eine null pointer bekommen hast oder? klar wenn aufeineml das 6. fahrzeug null ist, nehmen wir nur noch das erste... produziert zwar keinen fehler, ist aber sinnfrei ;-) der boolean vermietet wert war nicht null, der ist primitiv der kann gar nicht null sein. das auto an der stelle [5] war null, weil wir ja nur von 0 bis 4 was rein gestellt haben... ;-)


```
for (int i = 0; i < autos.length; i++){ 
         if(auots[i]==null){
            System.out.println("leer");
         }else if(autos[i].getvermietet()){ 
            System.out.println ("Auto ist bereits vermietet"); 
         }else{
            System.out.println ("Auto ist nicht vermietet"); 
         }
       }
```
so müsste es gehen...


----------



## Spin (30. Jan 2009)

Das mag sein, aber ich weiß nicht wo ich die einbauen soll.

Mir ist das echt zu hoch.

Muss morgen abgeben. Naja was solls, vielleicht finde ich irgendwann mal ein weg dahin.


----------



## manuela (30. Jan 2009)

Hallo,


```
boolean fertig = false; 
         while(!fertig) 
         { 
          System.out.println("Sie haben sich dazu entschieden ein Fahrzeug bei uns zu mieten."); 
          System.out.println(""); 
           System.out.println("Bitte waehlen sie ein Auto : 0 , 1 , 2, 3 , 4 "); 
          info(); 
          BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); 
          
          zahl2 = Integer.parseInt(eingabe.readLine()); 
           for (int i = 0; i < autos.length; i++){ 
                       if (autos[0].getvermietet()){ 
                       System.out.println ("Auto ist bereits vermietet"); 
                       } 
                     } 
          
          

          
          System.out.println("Bitte geben Sie Ihre Daten ein" 
                 +"\n" + " Vorname: "); 
         autos[zahl2-1].setFahrer(eingabe.readLine());  // aufnahme der Fahrer daten 

         System.out.println("Bitte geben Sie an wohin sie fahren möchten"); 
         autos[zahl2-1].setstandort(eingabe.readLine()); // Aufnahme des Fahrtziels 

          
         // 5 Autos von dennen 1 gewählt wurde 
         switch (zahl2) 
         { 
             case 1: print(); // Methode für Benutzerdialog 
              boolean a = true; 
             autos[0].info(); // Ausgabe des Arrays in dem nun Fahrer und Standort geändert wurde 
             autos[0].isVermietet(a);
```
wie ich das verstehe machst du folgendes. 
Du hast eine Ausgabe = Sie haben sich dazu ...
dann machst du einen einen Return   System.out.println("");  ist ein wenig unglücklich wenn du
System.out.println("Sie haben sich dazu entschieden ein Fahrzeug bei uns zu mieten.\n");  dass \n bewirkt das du einen Zeilenumbruch machst. 
dann willst du eine Eingabe machen  0  -  4 soweit so gut. Dann gehe ich davon aus, das darnach deine Eingabe geprüft wird 



```
for (int i = 0; i < autos.length; i++){   // Das bedeutet das dein Array durchlaufen wird und endet in deinem Fall mit 4
                       if (autos[0].getvermietet()){  // du fragst immer nur nach dem ersten Auto  if (autos[i].getvermietet()){ 

                       System.out.println ("Auto ist bereits vermietet"); 
                       } 
                     }
```

dein getter heist nichts anderes als gib mir den Wert und dein setter heist  setze den wert 
bei boolean sollte der getter  

```
public boolean isVermietet(){
   return vermietet;
}

und dein setter sollte
public setVermietet(boolean a){
vermietet = a;
}
```

ich hoffe ich konnte dir helfen.

Gruß Manuela


----------



## Spin (30. Jan 2009)

```
Vielen
```
Dank Manuela.


Ich habe die Klasse nun einfach mal zu ende geschrieben und bischen rumprobiert.

Aber das vermietet geht immer noch nicht 100%.



```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Autoverwaltung {



   /* Die Klasse Autoverwaltung besitzt die Klassenvariablen */
   static  int anzahlVermieteAutos;   // deklarieren der statischen Variablen
   static  int gesamtFahrleistung;
   static  double durchschnittlicheFahrleistung;
  

   static ErweitertesAuto autos[] = new ErweitertesAuto[10];   // ein statisches Array (10 slots)

     public static void dialog() throws IOException
     { //Methode Dialog 
    
    
    boolean fertig = false; //Boolean Typ wird mit False deklariert
    
    
    while(!fertig){//Whileschleife wird durchlaufen, solange ende nicht wahr ist
      System.out.println("Herzlich Willkommen zu Fahrzeugvermietung");
      System.out.println("Wählen Sie nun zwischen "
            +"\n" +"[1]Informationen über Fahrzeuge"
            +"\n" +"[2]Fahrzeug ausleihen"
            +"\n" +"[3]Gesamtübersicht"
            +"\n" +"[4]Programm beenden");
    
      
    BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));// Aus dem Package IO, KLasse BufferedReader  
    int  auswahl = Integer.parseInt(eingabe.readLine());// Ein lesen des Integerwerts
    
    switch(auswahl) {
        
        case 1: info();
        break;
        case 2: vermietung();
        break;
        case 3: ct();
        break;
        case 4: System.exit(-1);
    
     }  fertig= false;  // ist fertig // while schleife ist nun false
   }
     }
    
  public static void vermietung() throws IOException{
        
    BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader wird erzeugt
 
    
    for(int i = 0;i < 5;i++){//for-schleife  von 1 bis 5 durchlaufen
       System.out.println("Auto "+(i+1)+":"); //Text mit aktuellem Zählerstand wird ausgegeben
       if(!autos[i].vermietet) 
           autos[i].info();
       else System.out.println("vermietet");
    }
    System.out.println("Entscheiden Sie sich für ein Auto"); 
    int auswahl = (Integer.parseInt(eingabe.readLine())-1);
   
    System.out.println("Bitte geben Sie ihren Namen ein"); 
    autos[auswahl].setFahrer(eingabe.readLine());
    
    System.out.println("Bitte geben Sie ihr Fahrziel ein");  
    String target = eingabe.readLine();
    
    System.out.println("Bitte geben Sie die Entfernung ein"); 
    int distance = Integer.parseInt(eingabe.readLine());
    
  

         
    autos[auswahl].faehrtnach(target, distance);// Methode faehrt nach mit formalen Parametern wird aufgerufen
    autos[auswahl].vermietet = true;
    anzahlVermieteAutos++;// Nach dem auswahl getroffen wurde ist ein Auto nun vermietet
    gesamtFahrleistung = gesamtFahrleistung + distance;
   
    
    }
   

    
    public static void ct(){
     System.out.println("Fahrzeug-Gesamtübersicht"); 
     System.out.println("Vermietete Autos : "+anzahlVermieteAutos);
     System.out.println("Gesamtfahrleistung "+gesamtFahrleistung);
     
     
     if (!(anzahlVermieteAutos == 0)) {
     durchschnittlicheFahrleistung = gesamtFahrleistung / anzahlVermieteAutos;
     }//durch null darf man nicht teilen
     System.out.println("Durchschnittliche Fahrleistung "+ durchschnittlicheFahrleistung);
     System.out.println("Gesamtübersicht : ");
     
     for (int i = 0;i<5;i++){
         
        autos[i].info();
         
     }}


           
   
   
   public static void main(String[] args) throws IOException {
      
  
      autos[0] = new ErweitertesAuto(" ", "Auto ","rot",1980, 110,230000,"München",15498);
      autos[1] = new ErweitertesAuto("", "Auto","gelb",2001, 120,25900,"Rostock",15468);
      autos[2] = new ErweitertesAuto("", "Auto","blau",2005, 89,5000,"Berlin",15426);
      autos[3] = new ErweitertesAuto("", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
      autos[4] = new ErweitertesAuto("", "Auto","silber",2000, 205,50000,"Trier",15487);
       
    

    
      dialog();
      }
```



Vielleicht ist ardauer nun ein wenig stolz auf mich , dass ich es soweit geschafft habe...............



```
Auto 1:
vermietet
Auto 2:
 Fahrer:  Autotyp: Auto Farbe des Autos: gelb Erstzulassung: 2001 Leistung: 120 Kilometerstand: 25900 Standort Rostock Fahrgestellnumer15468
Auto 3:
 Fahrer:  Autotyp: Auto Farbe des Autos: blau Erstzulassung: 2005 Leistung: 89 Kilometerstand: 5000 Standort Berlin Fahrgestellnumer15426
Auto 4:
 Fahrer:  Autotyp: Bagger Farbe des Autos: grün Erstzulassung: 1999 Leistung: 55 Kilometerstand: 100000 Standort Hamburg Fahrgestellnumer33256
Auto 5:
 Fahrer:  Autotyp: Auto Farbe des Autos: silber Erstzulassung: 2000 Leistung: 205 Kilometerstand: 50000 Standort Trier Fahrgestellnumer15487
Entscheiden Sie sich für ein Auto
1
Bitte geben Sie ihren Namen ein
```




Kann mir da noch jemand ein tipp geben.

Ich versuche mich solange, dass programm abzufangen und eingabe fehler auszuschalten.

gruß spin

[/code]


----------



## Manuela (31. Jan 2009)

Hallo,

Fehler abzufangen kannst du mit 



```
try{
 ... hier muss dein code aber nur wo du Fehler erwartest.
}catch( Exception ee ) { // mach aber nicht nur Exception sondern nimm schon wenn ein NullPointerException kommen kann auch NullPointerException
 
und hier schreibst  du dann die Fehlerausgabe und was passieren soll. 
}
```


Gruß Manuela

ps.: hier ist noch ein Link 
da gibt es sicher noch etwas für dich.

http://www.java2s.com/Tutorial/Java/CatalogJava.htm


----------



## Spin (31. Jan 2009)

Vielen dank manuela...


```
package taschenrechner;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Autoverwaltung {



   /* Die Klasse Autoverwaltung besitzt die Klassenvariablen */
   static  int anzahlVermieteAutos;   // deklarieren der statischen Variablen
   static  int gesamtFahrleistung;
   static  double durchschnittlicheFahrleistung;
  

   static ErweitertesAuto autos[] = new ErweitertesAuto[10];   // ein statisches Array (10 slots)

     public static void dialog() throws IOException
     { //Methode Dialog 
    
    
    boolean fertig = false; //Boolean Typ wird mit False deklariert
    
    
    while(!fertig){//Whileschleife wird durchlaufen, solange ende nicht wahr ist
      System.out.println("Herzlich Willkommen zu Fahrzeugvermietung");
      System.out.println("Wählen Sie nun zwischen "
            +"\n" +"[1]Informationen über Fahrzeuge"
            +"\n" +"[2]Fahrzeug ausleihen"
            +"\n" +"[3]Gesamtübersicht"
            +"\n" +"[4]Programm beenden");
    
      
    BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));// Aus dem Package IO, KLasse BufferedReader  
    int  auswahl = Integer.parseInt(eingabe.readLine());// Ein lesen des Integerwerts
    
    switch(auswahl) {
        
        case 1: info();
        break;
        case 2: vermietung();
        break;
        case 3: ct();
        break;
        case 4: System.exit(-1);
    
     }  fertig= false;  // ist fertig // while schleife ist nun false
   }
     }
    
  public static void vermietung() throws IOException{
        
    BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader wird erzeugt
 
try{  
    for(int i = 0;i < 5;i++){//for-schleife  von 1 bis 5 durchlaufen
       System.out.println("Auto "+(i+1)+":"); //Text mit aktuellem Zählerstand wird ausgegeben
       if(!autos[i].vermietet) 
           autos[i].info();
       else System.out.println("vermietet");
    }
    System.out.println("Hallo, welches Auto möchten Sie sich gerne mieten?"); 
    int auswahl = (Integer.parseInt(eingabe.readLine())-1);
    
     while (!(auswahl>=0 && auswahl<=4)) //überprüfen der eingabe von [0] - [4]
                {
                    System.out.println("\n----------\n Auto konnte nicht gefunden werden. " +
                            "Bitte wählen Sie ein anderes Auto aus. " );
                    auswahl =(Integer.parseInt(eingabe.readLine())-1);
                }              
   
    System.out.println("Bitte geben Sie ihren Namen ein"); 
    autos[auswahl].setFahrer(eingabe.readLine());
    
     System.out.println("Bitte geben Sie ihr Geburtsjahr ein " +
                    "ein!\n");
           int year = Integer.parseInt(eingabe.readLine());
            
            if (year>1991)
            {                                                                  
                System.out.println("Auto fahren darf man leider erst mit 18 J. !"
                        + "Wir wünschen Ihnen noch einen schönen Tag");
                System.exit(-1);
            }
            
    
    System.out.println("Bitte geben Sie ihr Fahrziel ein");  
    String target = eingabe.readLine();
     if (!Autoverwaltung.nameOkay(target))
                     {
                     
                     System.out.println("Eingabefehler");
                     System.exit(-1);
                     }
    System.out.println("Bitte geben Sie die Entfernung ein"); 
    int distance = Integer.parseInt(eingabe.readLine());
    
  

         
    autos[auswahl].faehrtnach(target, distance);// Methode faehrt nach mit formalen Parametern wird aufgerufen
    autos[auswahl].vermietet = true;
    anzahlVermieteAutos++;// Nach dem auswahl getroffen wurde ist ein Auto nun vermietet
    gesamtFahrleistung = gesamtFahrleistung + distance;
}
 catch (IOException e)                                                     //catch-Block, falls Fehler auftreten...
        {
            System.out.println("Fehler" + e.getMessage());
        }
catch (NumberFormatException a) // Fehler der bei falscher Zahleneingabe entsteht
   {
   System.out.println("Achtung - Sie haben eine NumberFormatException ausgelöst");
   System.out.println("AEs gab folgendes Problem " + a.getMessage());
   } 
}
   

    
    public static void ct(){
     System.out.println("Fahrzeug-Gesamtübersicht"); 
     System.out.println("Vermietete Autos : "+anzahlVermieteAutos);
     System.out.println("Gesamtfahrleistung "+gesamtFahrleistung);
     
     
     if (!(anzahlVermieteAutos == 0)) { //muss erst ein Auto vermietet werden
     durchschnittlicheFahrleistung = gesamtFahrleistung / anzahlVermieteAutos;
     }//durch null darf man nicht teilen
     System.out.println("Durchschnittliche Fahrleistung "+ durchschnittlicheFahrleistung);
     System.out.println("Gesamtübersicht : ");
     
     for (int i = 0;i<5;i++){
         
        autos[i].info();
         
     }
    }


           
   
   
   public static void main(String[] args) throws IOException {
      
  
      autos[0] = new ErweitertesAuto(" ", "Auto ","rot",1980, 110,230000,"München",15498);
      autos[1] = new ErweitertesAuto("", "Auto","gelb",2001, 120,25900,"Rostock",15468);
      autos[2] = new ErweitertesAuto("", "Auto","blau",2005, 89,5000,"Berlin",15426);
      autos[3] = new ErweitertesAuto("", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
      autos[4] = new ErweitertesAuto("", "Auto","silber",2000, 205,50000,"Trier",15487);
       
    

    
      dialog();
      }

private static boolean nameOkay(String name) {
 if (name == null || name.isEmpty()) // wenn keine Werte in die eingabe einfließen = Rückgabe false !
  return false;

 // zum Beispiel (ansonsten evtl. Regex)
 char[] ca = name.toCharArray(); // Der eingegbene String wird in ein CharArray verwandelt und anschließend wird jedes einzelne Zeiche
 for (char c : ca)               // überprüft.
  if (!Character.isLetter(c)) // aufrufen  der isLetter Methode von Klasse Character um zu prüfen ob es sich um einen Buchstaben handelt
   return false; // wenn es sich um keinen Buchstaben handelt = false.

 return true;
}



   public static void info(){
      for(int i = 0; i < autos.length; i++){
         System.out.println("Auto: "+(i+1)+"\t");  // Ausgabe der Autos
         if(autos[i]!=null){
            autos[i].info(); // Aufruf der info Methode
         }else{
            System.out.println("leer");
         }
      }
   

   }
```



heute abend ist abgabe. Na ich denke es reicht so. Danke@all


----------



## Gast (8. Feb 2009)

Hallo zusammen, 

ich muss auch für eine Autovermietung ein Programm schreiben.
In der Klasse Buchung möchte ich gerne einen Kalender einfügen, um folgendes auszurechnen....

(Abgabedatum-Abholdatum)*Preis pro Tag...
ich weiss aber gar 

wäre echt super wenn mir da jemand helfen könnte was ich machen sollte..

Vielen Dank schon mal


----------



## Schandro (8. Feb 2009)

@Thread-Leecher
z.b. www.toedter.com/en/jcalendar/ benutzen oder selber schreiben. Wo ist das Problem mit dem selber schreiben, dein Satz oben läuft irgendwie ins leere....


----------



## kitz (14. Jan 2010)

Hallo,

also ich habe auch eine Autovermietungsaufgabe.
Und ich habe da jetzt meine Klasse Autovermietung und in der habe ich zwei Fehler.

1. in der vermietung () (Zeile 72) zeigt er mir den Feher an bei getVermietet -->  cannot find Symbol getVermietet

Das kann ich ja auch so halb nachvollziehen, aber ich bin an dieser Stelle etwas überfordert. Ich soll meine Autos, die nicht vermietete sind, auswerfen.
Und ich hänge da einfach an der Stelle, weil ich nicht so ganz weiß, wie ich das umsetzen soll.

2. In der Auswahl funktioniert mein case1: info(); nicht (Zeile 49).

Das kann ich auch nachvollziehen irgendwie, weil er sich ja auf info() aus ErweitertesAuto beziehen soll.
Aber auch da hänge ich

Vielleicht hat wer da nen Hinweis für mich


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Autoverwaltung {



   
   static  int anzahlVermieteAutos;   
   static  int gesamtFahrleistung;
   static  double durchschnittlicheFahrleistung;


  static ErweitertesAuto autos[] = new ErweitertesAuto[10];   
public static void main(String[] args) throws IOException {

   

   autos[0] = new ErweitertesAuto(" ", "Auto ","rot",1980, 110,230000,"München",15498);
      autos[1] = new ErweitertesAuto("", "Auto","gelb",2001, 120,25900,"Rostock",15468);
      autos[2] = new ErweitertesAuto("", "Auto","blau",2005, 89,5000,"Berlin",15426);
      autos[3] = new ErweitertesAuto("", "Bagger","grün",1999, 55,100000,"Hamburg",33256);
      autos[4] = new ErweitertesAuto("", "Auto","silber",2000, 205,50000,"Trier",15487);

   


    boolean fertig = false; 


    while(!fertig){
      System.out.println("Herzlich Willkommen zu Fahrzeugvermietung");
      System.out.println("Wählen Sie nun zwischen "
            +"\n" +"[1]Informationen über Fahrzeuge"
            +"\n" +"[2]Fahrzeug ausleihen"
            +"\n" +"[3]Gesamtübersicht"
            +"\n" +"[4]rogramm beenden");


    BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
    int  auswahl = Integer.parseInt(eingabe.readLine());

    switch(auswahl) {



        case 1: info ();
        break;
        case 2: vermietung();
        break;
        case 3: ct();
        break;
        case 4: System.exit(-1);

     }  fertig= false;  
   }
     }


  

  public static void vermietung() throws IOException{

     boolean vermietet=false;

    for (int i = 0;i < 5;i++){
       System.out.println("Auto "+(i+1)+":");
   
       
       if (autos[i].getVermietet == false )
           autos[i].info();
       else System.out.println("vermietet");
    }

     BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); 

    System.out.println("\nEntscheiden Sie sich für ein Auto");
    int auswahl = (Integer.parseInt(eingabe.readLine())-1);

    System.out.println("Bitte geben Sie ihren Namen ein");
    autos[auswahl].set_Fahrer(eingabe.readLine());

    System.out.println("Bitte geben Sie ihr Fahrziel ein");
    String fahrtziel = eingabe.readLine();

    System.out.println("Bitte geben Sie die Entfernung ein");
    int entfernung = Integer.parseInt(eingabe.readLine());




    autos[auswahl].faehrtNach(fahrtziel, entfernung);
  
    anzahlVermieteAutos++;
    gesamtFahrleistung = gesamtFahrleistung + entfernung;


    }



    public static void ct(){
     System.out.println("Fahrzeug-Gesamtübersicht");
     System.out.println("Vermietete Autos : "+anzahlVermieteAutos);
     System.out.println("Gesamtfahrleistung "+gesamtFahrleistung);


     if (!(anzahlVermieteAutos == 0)) {
     durchschnittlicheFahrleistung = gesamtFahrleistung / anzahlVermieteAutos;
     }
     System.out.println("Durchschnittliche Fahrleistung "+ durchschnittlicheFahrleistung);
     System.out.println("Gesamtübersicht : ");
    
    }

  
public static void dialog() throws IOException
     { 


      dialog();
      }

  
}
```





```
public class ErweitertesAuto extends EinfachesAuto {

    private String standort;
    private long fahrgestellnummer;
    

    public ErweitertesAuto () {
    }

    public ErweitertesAuto (String fahrer, String autotyp, String farbe,
            int erstzulassung, int leistung, int kmStand, String standort,
            long fahrgestellnummer) {

        super (fahrer, autotyp, farbe, erstzulassung, leistung, kmStand);
        this.standort=standort;
        this.fahrgestellnummer=fahrgestellnummer;
    }

    public String get_Standort () {
        return standort;
    }

    public void set_Standort (String standort) {
        this.standort=standort;
    }

    public long get_Fahrgestellnummer () {
        return fahrgestellnummer;
    }

    public void set_Fahrgestellnummer (long fahrgestellnummer) {
        this.fahrgestellnummer=fahrgestellnummer;
    }


  
    

    public void info () {
        ErweitertesAuto a = new ErweitertesAuto ();
        System.out.println ("Daten des Fahrzeugs:\n ");
        System.out.println ("Fahrer: " +a.get_Fahrer ());
        System.out.println ("Autotyp: " +a.get_Autotyp ());
        System.out.println ("Farbe: " +a.get_Farbe ());
        System.out.println ("Erstzulassung: " +a.get_Erstzulassung ());
        System.out.println ("Leistung: " +a.get_Leistung());
        System.out.println ("Fahrgestellnummer: " +a.get_Fahrgestellnummer());
    }


    public String vermietet (){
        return standort ;
    }

    private String Ziel;
    private int Entfernung;

    public int faehrtNach (String Ziel, int Entfernung) {
        ErweitertesAuto a = new ErweitertesAuto ();
        System.out.println ("Das Auto fährt von Lübeck nach " +Ziel+ " :" +Entfernung+ "km");
        return a.get_KmStand ();
    }

    

    

}
```


----------



## Spin (15. Jan 2010)

Um Info() zu benutzen musst du ein Objekt von Erweitertes Auto nehmen .

Bsp: ErweitertesAuto a = new ErweitertesAuto(...);

Und ann kannst die Methode aufrufen.

GetVermietet kann er nicht finden , da es die Methode garnicht gibt in erweitertes Auto.

Dazu musst du ein getter bauen. Der die dann die variable zurückgibt.
grüße


----------



## kitz (15. Jan 2010)

Danke für die Antwort.. Werde das gleich mal ausprobieren..
Und mir ist inzwischen noch was aufgefallen.
Wenn er die Daten der autos aus dem array anzeigen soll, dann wirft er mir nur nullen aus und nicht die daten die ich ihm vorgegeben habe.. obwohl ich ihn ja bei info () i=0 gesetzt habe und er immer einen hochzählen soll


----------



## eRaaaa (15. Jan 2010)

Du erstellst ja jedesmal ein neues Auto in der Methode info(). Daher sind auch alle Werte 0 und Sinn macht das auch nicht


```
public void info () {
        System.out.println ("Daten des Fahrzeugs:\n ");
        System.out.println ("Fahrer: " +this.get_Fahrer ());
        System.out.println ("Autotyp: " +this.get_Autotyp ());
        System.out.println ("Farbe: " +this.get_Farbe ());
        System.out.println ("Erstzulassung: " +this.get_Erstzulassung ());
        System.out.println ("Leistung: " +this.get_Leistung());
        System.out.println ("Fahrgestellnummer: " +this.get_Fahrgestellnummer());
    }
```

Und dann musst du die Methode natürlich auch auf einem Auto aufrufen, also z.b.

autos[0].info();

Gruß


----------



## kitz (15. Jan 2010)

Aber die Methode rufe ich doch auf in Zeile73 durch autos_.info ()

und info () ist so vorgegeben vom aufbau her aus der aufgabenstellung
und es sollen ja auch 5 autos erstellt werden_


----------



## eRaaaa (15. Jan 2010)

kitz hat gesagt.:


> Aber die Methode rufe ich doch auf in Zeile73 durch autos_.info ()
> 
> _


_

Ah okay. Ich hab nur Zeile 49 gesehen gehabt. Dort funktioniert das natürlich so nicht.

P.s.: Wegen Zeile 72: Soll das nicht eher ein Methodenaufruf sein? Wenn ja, fehlen da die Klammern () :toll:




			und info () ist so vorgegeben vom aufbau her aus der aufgabenstellung
und es sollen ja auch 5 autos erstellt werden
		
Zum Vergrößern anklicken....


Äh Moment. Wie genau lautet denn die Aufgabenstellung, weil ich denke nicht dass du da ein neues Auto erstellen sollst, macht doch keinen Sinn?! Und was hat das jetzt mit den 5 Autos zu tun? ;(_


----------



## kitz (15. Jan 2010)

Die komplette Aufgabenstellung sieht so aus:

1. Programmieren Sie eine Klasse EinfachesAuto mit folgenden Eigenschaften: die Klasse EinfachesAuto besitzt die Attribute fahrer, autotyp, farbe vom Typ String. Weiterhin die Attribute erstzulassung, leistung und kmStand vom Typ int. Deklarieren Sie die genannten Eigenschaften als private oder falls erforderlich als protected und deklarieren Sie geeignete set- und get-Methoden für den Zugriff auf private und protected- Attribute. Zeigen Sie, daß der Zugriff auf als private deklarierte Elemente aus der Testklasse möglich, aus der abgeleiteten Klasse aber nicht möglich ist.

Die Klasse EinfachesAuto verfügt neben den parametererlosen Standardkonstruktor public EinfachesAuto() auch über einen überladenen Konstruktor
public EinfachesAuto(String fahrer, String autotyp,   String farbe, int erstzulassung, int leistung, int kmStand)


Die Klasse EinfachesAuto soll darüber hinaus über die Methode
    public int alter()

verfügen, die die Differenz zwischen erstzulassung und dem aktuellen Datum (hier das Jahr 2008) liefert . 


Die Klasse EinfachesAuto soll auch über die Methode
    public void info()

verfügen, die die Attributwerte von farbe und von fahrer des aktuellen Autos auf der Konsole ausgibt. Die Klasse EinfachesAuto wird in der Datei EinfachesAuto.java gespeichert.


2. Schreiben Sie eine Testklasse EinfachesAutoTest, mit der Sie die Klasse EinfachesAuto testen. In der Testklasse wird ein Objekt von EinfachesAuto erzeugt, das die Methoden von EinfachesAuto aktiviert. Die Klasse EinfachesAutoTest wird in der Datei EinfachesAutoTest.java gespeichert.


3.  Programmieren Sie eine Klasse ErweitertesAuto. Die Klasse ErweitertesAuto ist aus der Klasse EinfachesAuto abzuleiten. Zusätzlich zu den Eigenschaften und Methoden der Klasse EinfachesAuto soll sie überdie Attribute 

•	  String standort 
•	 long fahrgestellnummer

verfügen. Beide Attribute sind als private oder - falls erforderlich - als protected zu deklarieren. Deklarieren Sie geeignete set- und get-Methoden für den Zugriff auf private und protected- Attribute. Erweitern Sie die Klasse EinfachesAuto auch um folgende Methoden: 

•	einen weiteren überladenen Konstruktor, der die Attribute standort und fahrgestellnummer ebenfalls initialisiert und der mit super den Konstruktor von EinfachesAuto aufruft. 

•	Die überschriebene Methode 
void info(),
die die Werte aller Attribute in übersichtlicher Form auf den Bildschirm schreibt, und

•	die Methode 
int faehrtNach(String Ziel, int Entfernung).

Diese Methode schreibt eine Meldung auf den Bildschirm, etwa "Auto fährt von Berlin nach Hamburg: 250 km" und speichert den neuen Standort und den neuen Kilometerstand des aktuellen Autoobjekts. Ihr Rückgabewert ist der kmStand.


4. Deklarieren Sie eine Klasse Bagger. Die Klasse Bagger ist von ErweitertesAuto abzuleiten. Die Klasse Bagger verfügt zusätzlich über das private Attribut ausruestung, mit dem Wertebereich {"Schaufel" , "Bohrer"}. Daneben verfügt die Klasse Bagger auch über eine überschriebene Methode info().Die Klasse Bagger wird in der Datei Bagger.java gespeichert.


5.    Programmieren Sie eine Klasse Autoverwaltung mit folgenden Eigenschaften. Die Klasse Autoverwaltung besitzt die Klassenvariablen anzahlVermieteteAutos, gesamtFahrleistung vom Typ int und durchschnittlicheFahrleistung vom Typ double. Dadurch sind die Anzahl der vermieteten Autos jederzeit verfügbar. Das gleiche gilt für die Fahrleistung aller Autos. Deklarieren Sie die genannten Eigenschaften als static.

Deklarieren Sie in Autoverwaltung ein statisches Objektarray autos[]von Objekten der Klasse ErweitertesAuto. DieLänge des Objektarrays sei 10.Erzeugen Sie in der Klasse Autoverwaltung fünfObjekte von ErweitertesAuto.

Die Klasse Autoverwaltung besitzt dazu die statische Methoden vermietung(). Die statische Methode vermietung() soll innerhalb eines Dialogs (einfache while(true)- Schleife) einen Vermietungsvorgang (in stark vereinfachter Form) abbilden. Sie wird von der Klassenmethode dialog() aufgerufen, die dem Nutzer die Auswahl zwischen vermieten() und der Klassenmethode info() ermöglicht. Die freien Autos sollen angezeigt werden. Dann nimmt vermietung() Fahrerdaten, die Fahrzeugdaten und das Fahrtziel auf. Der Status des betreffenden Autos ist nun "vermietet". Die Klassenmethode control() soll jederzeit die Übersicht über den Fuhrpark, die Gesamtzahl der vermieteten Autos, die gesamte Fahrleistung aller Autos und die durchschnittliche Fahrleistung pro Auto ausgeben. Die Klasse Autoverwaltung wird in der Datei Autoverwaltung.java gespeichert.




Und ich komme halt mit diesem Vermietungsvorgang nicht zurecht. Ich weiß nicht wie ich die Daten des jeweiligen Autos richtig auswerfen kann und wie ich ihm dann das auto als vermietet setzen kann.
Bzw. es sollen ja nur die Autos angezeigt werden, die nicht vermietet sind


----------



## eRaaaa (15. Jan 2010)

> Die überschriebene Methode
> void info(),
> die die Werte aller Attribute in übersichtlicher Form auf den Bildschirm schreibt,



Und genau das macht mein Code den ich dir bereits schon vorgeschlagen habe 

Den Rest habe ich mir jetzt nicht durchgelesen, ich schlage dir vor, erstelle einen neuen übersichtlichen Thread auf wo du nochmal genau beschreibst wie dein Code(nur der, der von belangen ist) aussieht, und wo du nicht weiterkommst. Hier wird das sonst alles IMO zu unübersichtlich!


----------

