# Object Daten aus Arraylist auslesen



## Guest (27. Mrz 2008)

Halloa,
ich bin wirklich blutiger Anfänger, aber naja folgendes:
Ich möchte einen kleinen Autoverleih erstellen und habe 2 klassen, einmal Autoverleih und Auto.
Mit der Klasse Autoverleih will ich das Anfangs und Enddatum sowie die gefahren km des Autos speichern.
Die Daten werden also in die Klasse Auto geschrieben und die objecte in einer Arraylist gespeichert, soweit sollte das glaub ich auch schonmal funktionieren.
Nur wie sieht jetzt eigentlich die Klasse Auto aus? und vor allem wie kann ich die einzelnen Daten der Autos wieder auslesen.
Ich poste mal meinen quelltext


```
public class autoVerleih
{
    private ArrayList<Auto> autos;
    
    
    
    public autoVerleih()
    {
        autos = new ArrayList<Auto>();
    }
    
    public void neueAusleihe(int beginDat, int endDat, int km)
    {
        autos.add(new Auto(beginDat, endDat, km));
                                    
    }  

    public void getData(int auto)
    {
        System.out.println("Bla: " + autos.get(Auto.getBeginDat));
    }
        
}
```

Und hier die Klasse Auto



```
public class Auto
{
    public int beginDat;
    public int endDat;
    public int km;

    public Auto(int gefahreneKm, int beginDatum, int endDatum)
        {
            this.beginDat    = beginDatum;
            this.endDat      = endDatum;
            this.km          = gefahreneKm;
        }
        
    public int getGefahreneKm()
    {
        return km;
    }
    
    public int getBeginDat()
    {
        return beginDat;
    }

    public int getEndDat()
    {
        return endDat;
    }
}
```


Stehen "int beginDat, int endDat, int km" aus Autoverleih eigentlich in Verbindung mit     "public int beginDat; public int endDat;    public int km;" ? 

Grüße, Jens


----------



## MiDniGG (27. Mrz 2008)

Also zur letzten Frage: Ja.
Du übergibst sie dem Konstruktor von Auto als Parameter und setzt dann z.B. public int beginDat auf den selben Wert wie der in autoverleih.

Für Arrays, ArrayList usw. würd ich mir ma en paar Artikel durchlesen... z.B. den hier http://www.galileocomputing.de/openbook/javainsel7/javainsel_03_009.htm  und für ArrayList http://www.tutego.com/javabuch/javainsel6/javainsel_11_003.htm#mje721809c94b759b9c15e2ba0d0b9589f


----------



## theschaaf (27. Mrz 2008)

ach verdammt ich war nicht eingeloggt, wollte noch was verändern


```
public void getData(int autoNr)
    {
        System.out.println("Bla: " + autos.get(Auto.getBeginDat));
    }
```


das ist natürlich totaler quatsch an coder, ich würde halt gerne sagen autoNr "1" --> bitte BeginDat ausgeben
...
Danke schonmal für die Antwort, ändere ich die Paramater z.B. von km in kilometer gibts aber keinen syntaxfehler?! Aber den müsste es doch geben weil die variabel in der klasse Auto ja gar nicht vorhanden ist.


----------



## MiDniGG (27. Mrz 2008)

autos.get(0) //Erster Eintrag
System.out.println(autos.get(0).getBeginDat); sollte gehen...
wenn ned muss ichs mir doch mal anschaun ^^


----------



## maki (27. Mrz 2008)

```
public int beginDat;
    public int endDat;
    public int km;
```
Ändere public zu private oder protected.


----------



## MiDniGG (27. Mrz 2008)

Ja stimmt. Ist sinnvoller


----------



## theschaaf (27. Mrz 2008)

MiDniGG hat gesagt.:
			
		

> Ja stimmt. Ist sinnvoller


weil?
klappt auf jeden Fall, vielen dank. fehlten nurn ; und zwei )

ich muss schon sagen tolles board hier, gefällt mir =)


----------



## maki (27. Mrz 2008)

Weil public Instanzvariablen schlecht sind, durchbricht die Kapselung und offenbart Implementierungsdetails, böse böse...


----------



## MiDniGG (27. Mrz 2008)

Nuja. Kann passieren.

Weil: Wenn du die Dinger (auch Variablen genannt) private machst kann man von außen nicht mehr auf diese zugreifen, was sehr sinnvoll ist ^^ Falls du dann immernoch nen Zugriff brauchst kannste das mit getter/setter lösen. Also z.B. getBeginDat / setBeginDat
Dürfte aber auch in einen der ersten Kapitel in der Javainsel stehen..... einfach mal stöbern ;-)


----------



## MiDniGG (27. Mrz 2008)

Gut so kammers au sagen ^^ Ich weiß, dass meine Ausdrucksweise nix ist :-D


----------



## theschaaf (27. Mrz 2008)

aaachso, 
mir war klar das ich von aussen dann nichtmehr auf sie zugreifen kann, aber ich dachte das würde das zugreifen über autoverleih auch verhindern!


----------



## theschaaf (27. Mrz 2008)

Ich möchte jetzt in einer dritten Klasse die Anzahl der Tage ausrechnen, um mit dieser Anzahl dann in der Klasse Auto den Preis zu berechnen, ich allerdings keinen Schnall wie ich das irgendwie umsätzen kann :/


```
public class autoVerleih
{
    private ArrayList<Auto> autos;
    private Datum datum;
    
    
    public autoVerleih()
    {
        autos = new ArrayList<Auto>();
    }
    
    public void neueAusleihe(int beginDat, int endDat, int km)
    {
        autos.add(new Auto(beginDat, endDat, km));                                   
    }  

     public void getData()
     {         
         for(int i = 0; i < autos.size(); i++)
         {
         autos.get(i); 
         System.out.println("Beginn Datum: " + autos.get(i).getBeginDat());
         System.out.println("End Datum   : " + autos.get(i).getEndDat());
         System.out.println("Kilometer   : " + autos.get(i).getGefahreneKm());
         System.out.println("Kosten      : " + autos.get(i).getKosten());
         System.out.println();
         }
     }
     }
```


```
public class Auto
{
    private int beginDat;
    private int endDat;
    private int km;

    public Auto(int beginDatum, int endDatum, int gefahreneKm)
        {
            this.beginDat    = beginDatum;
            this.endDat      = endDatum;
            this.km          = gefahreneKm;
        }
        
    public int getGefahreneKm()
    {
        return km;
    }
    
    public int getBeginDat()
    {
        return beginDat;
    }

    public int getEndDat()
    {
        return endDat;
    }
    
    public int getKosten()
    {
        int Betrag = km * 10;//*tage
        return Betrag;
    }
}
```


```
public class Datum
{
    private int beginDat;
    private int endDat;


    public Datum(int beginDatum, int endDatum)
        {
            this.beginDat    = beginDatum;
            this.endDat      = endDatum;
        }
        
     public int getTage()
        {
            int tage= endDat - beginDat;
            return tage;
        }
}
```

Wie kriege ich es hin in der Klasse Datum mit "endDat und beginDat" aus "Auto" zu rechnen und den Wert dann in Auto wieder weiter zu gebrauchen. Das getTage kein korrektes Ergebnis bringen kann ist mir klar und erstmal nebensächlich.
Kann mir da jemand nen Denkanstos geben?


----------



## MiDniGG (28. Mrz 2008)

Naja. Schaut doch schon ganz gut aus. Du musst halt nur noch die Klasse Datum mit den entsprechenden Parametern aus der Auto-Klasse aus aufrufen.


----------

