# Variable einer Klasse in einer anderen Klasse nutzen



## Beginner09 (6. Jan 2010)

Guten Abend,

ich habe eine Klasse Team, wo ich ein Array 'mannschaft' vom Typ 'Spieler' (Felder: name, rueckennummer, offen etc.) erzeuge.
Des weiteren habe ich eine Klasse 'Kasse'. In der Klasse 'Kasse' ist eine Variable 'Monatsbeitrag' enthalten und mit einem double-Wert versehen.

So weit so gut; ich hoffe Ihr könnt mir noch folgen 

Nun möchte ich in der Klasse 'Kasse' eine Methode schreiben, welche unter Eingabe der jeweiligen rueckennummer dem Posten 'offen' den Monatsbeitrag hinzuaddiert.

Ist es überhaupt möglich, dass ich in der Klasse 'Team' auf die Variable 'monatsbeitrag' der Klasse 'Kasse' zugreifen kann oder nicht?

Variablen sind doch nicht global gültig, sondern nur innerhalb ihrer Klasse, meine ich aufgeschnappt zu haben, oder? Wenn dem so sein sollte, wäre ich dankbar für einen Denkanstoß dieses Problem zu beheben.

Danke


----------



## Michael... (6. Jan 2010)

Ich würde das so lösen es gibt eine Klasse Team die besitzt ein Objekt Kasse und die einzelnen Spielerobjekte wenn die Klasse Kasse eine Methode um auf die Monatsbeitrage zu zugreifen.

Gibt's denn schon Code?


----------



## nickname (6. Jan 2010)

Hi Beginner09,

ein wenig von deinem Code wäre schon vorteilhaft. Aber ich versuche es mal...



			
				beginner09 hat gesagt.:
			
		

> Variablen sind doch nicht global gültig


doch sind sie. Wenn du eine Variable mit dem modifierer "public" versiehst, dann ja
oder du deklarierst sie als "static" dann kannst du sie über deinen Klassennamen,
indem diese deklariert ist erreichen.



			
				beginner09 hat gesagt.:
			
		

> sondern nur innerhalb ihrer Klasse


dann kannst du sie als "private" deklarieren. Dann sind sie nur in der Klasse sichtbar.
Sind deine Variablen aber als default deklariert, dann sind sie in deinem Paket sichtbar.

Wenn du Variablen innerhalt einer Methode deklarierst, dann sind diese auch nur dort sichtbar.
Dabei musst du beachten, dass diese dann auch sofort initialisiert werden müssen, sonst gibt der
Compiler einen Fehler aus.

gruß nickname


----------



## frapo (6. Jan 2010)

Beginner09 hat gesagt.:


> Ist es überhaupt möglich, dass ich in der Klasse 'Team' auf die Variable 'monatsbeitrag' der Klasse 'Kasse' zugreifen kann oder nicht?



Ja, das ist möglich . Die Variable monatsbeitrag, muss halt nur nach aussen sichtbar sein. Sie darf also nicht private sein.

edit: andere waren mal wieder schneller


----------



## Beginner09 (6. Jan 2010)

Klasse 'Kasse'
[Java]
public class Kasse
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private double anfangsbestand;
    public double monatsbeitrag;
    private ArrayList<Einnahmen> einnahmen;
    private ArrayList<Ausgaben> ausgaben;

    public Kasse(double anfangsbestand, double monatsbeitrag)
    {
        // Instanzvariable initialisieren
        this.anfangsbestand=anfangsbestand;
        this.monatsbeitrag=monatsbeitrag;
    }//Konstruktor 1

...

}//class
[/Java]
Im Konstruktor kann der Nutzer den Monatsbeitrag festlegen.

Nun die Klasse Team:
[Java]
public class Team
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private Spieler[] mannschaft;
    private int anzahl;

    /**
     * Konstruktor für Objekte der Klasse Team
     */
    public Team(int maxanzahl)
    {
        // Instanzvariable initialisieren
        mannschaft = new Spieler[maxanzahl];    //neues Array vom Typ Spieler
        anzahl=0;
    }//Konstruktor

...

}//class
[/Java]

Und hier man schon x-mal abgewandelter Versuch für das Hinzufügen des Monatsbeitrages:
[Java]
    public void hinzuMonatsbeitrag(int rueckennummer)
    {
        mannschaft[rueckennummer] = mannschaft[offen] + Kasse.monatsbeitrag; //ich weiß, dass ist grundlegend falsch :-(
    }//hinzuRueckennumer
[/code]
Hierbei möchte ich, dass der Nutzer eine Rückennummer angibt und sich dann der Spieler im Array 'mannschaft' gesucht wird bei dem diese Rückennummer zutrifft. Und bei DIESEM Spieler soll dann bei 'offen' der Monatsbeitrag hinzuaddiert werden.

Könnt Ihr mir folgen? =)

Danke


----------



## nickname (6. Jan 2010)

Hi,


```
public void hinzuMonatsbeitrag(int rueckennummer)
    {
        mannschaft[rueckennummer] = mannschaft[offen] + Kasse.monatsbeitrag; //ich weiß, dass ist grundlegend falsch :-(
    }//hinzuRueckennumer
```
Normalerweise müsste der Compiler hier bei "Kasse.monatsbeitrag" einen Fehler ausgeben, weil die 
Varibale "monatsbeitrag" nicht "static" ist...
Da es ja nicht so wichtig scheint versuch mal die Variable als "public static monatsbeitrag" zu deklarieren.
Und denk dran, wenn die Klasse geladen wird, wird der Wert automatisch auf null gesetzt.

Auf Variablen solltest du besser eh nur über get- oder set-Methoden zugreifen.

gruß nickname


----------



## Beginner09 (6. Jan 2010)

Das habe ich mittlerweile gemacht ;-)

Das mit dem Array ist mir noch nicht klar.
Ich habe das array 'mannschaft' vom Typ 'Spieler'. Und der Datentyp 'Spieler' wiederrum besteht aus den Feldern 'vname','nname','offen' usw.

Nun möchte ich den Wert in 'offen' ja verändern. Wie spreche ich diesen an?
Ich komme da auf keinen grünen Zweig.

Grüße

EDIT:

Vielleicht kann das mein Vorhanden ein wenig visualisieren:
[Java]
mannschaft_.[offen] = mannschaft.[offen] + Kasse.monatsbeitrag;
[/code]_


----------



## Michael... (6. Jan 2010)

Was soll das mit dem "offen" bzw. mannschaft[offen]? Verstehe ich nicht


----------



## Beginner09 (6. Jan 2010)

Habe meinen vorherigen Eintrag noch mal editiert.

Der Wert in "offen" soll um den Monatsbeitrag erhöht werden.


----------



## nickname (6. Jan 2010)

Also, du kannst in kein Array vom Typ einer Klasse int-Werte einfügen.

In einen Datentyp String kannst du auch nicht einen int-Wert einfügen.


----------



## Beginner09 (6. Jan 2010)

Hättest Du denn einen Vorschlag wie ich das auf einem anderen Wege bewerkstelligen könnte? Sowie "Michael..." ganz oben bspw. vorgeschlagen hat?

Grüße


----------



## Michael... (6. Jan 2010)

ohne mich jetzt über den Sinn auszulassen. Müsste so lauten:

```
mannschaft[i].offen = mannschaft[i].offen + Kasse.monatsbeitrag;
```
bzw. in Kurzform

```
mannschaft[i].offen += Kasse.monatsbeitrag;
```
sofern offen public ist und monatsbeitrag public static


----------



## Beginner09 (6. Jan 2010)

Lass Dich gerne über den Sinn aus. Das ist mein erstes "Projekt" mit insgesamt 7 Klassen. Für mich also ein kleiner Meilenstein, wenn es denn funktionieren sollte irgendwann. ;-)

Danke


----------



## Michael... (7. Jan 2010)

Soll in offen die Summe der zu zahlenden Monatsbeitrage gespeichert werden?
Sowas sollte doch eher die Kasse bzw. das Team "wissen"


----------



## Beginner09 (7. Jan 2010)

So sieht es nämlich aus. Das habe ich auch so eben abgeändert. Ich bin schon etwas "betriebsblind" in den letzten Stunden geworden. Teilweise viel zu kompliziert. Wenn ich mir den Quelltext morgen anschaue, werde ich mir an den Kopf fassen, denke ich.

Grüße & Danke


----------

