Von einer Methode auf eine lokale Variable in der Main zugreifen?

Hallo,

habe mal wieder Schwierigkeiten und komme einfach nicht weiter.;(

Habe hier eine Aufgabenstellung aus einer alten Klausur die wie folgt heißt:
Ergänzen Sie die Klasse „FussballStat“ um eine Methode mit dem folgenden Methodenkopf:
Java:
Spieler[ ] getSpielerMitNToren (int n)
Diese Methode liefert ein Array mit allen Spielern aus „mannschaften“, die n Tore geschossen
haben.

Die vorgegebene Klasse „FussballStat“ sieht so aus:
Java:
public class FussballStat {

	public static void main(String[] arg) {
		
		private List<Mannschaften> mannschaften = new LinkedList<Mannschaften>();
		Spieler[] spieler1 = {new Spieler("Podolski"), new Spieler("Schweinsteiger")};
		
		LinkedList<Spieler> spieler2 = new LinkedList<Spieler>();
		spieler2.add(new Spieler("Lucio"));
		ArrayList<Spieler> spieler3 = new ArrayList<Spieler>();
		spieler3.add(new Spieler("Robben"));
		Spieler[] spieler4;
		
		mannschaften.add(new Mannschaften(spieler1));
		mannschaften.add(new Mannschaften(spieler2));
		mannschaften.add(new Mannschaften(spieler3));
		spieler4 = mannschaften.get(0).getSpieler1();
		
		}
// weitere methoden...
	// mein bescheidener Versuch die Methode zu implementieren
	/*
	 	 Spieler[] getSpielerMitNToren(int n){
			for(Mannschaften mn: mannschaften)
			return null;
			
		}
		*/	 
}

Neben der Klasse FussballStat ist noch die Klasse Spieler vorgegeben:
Java:
public class Spieler {

	private String name;
	private int tore = 0;
	
	Spieler(String name){
		this.setName(name);
	}
	public void addTor(){
		tore++;
		
	}
	public int getTore(){
		return tore;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public String toString(){
		return name;
	}
}
1. Wie schaffe ich es auf die Variable "mannschaften" von der Methode getSpielerMitNToren() zu zugreifen?
2. Die Variable "mannschaften" in Zeile 5 ist mit private versehen Eclipse meldet mit hier einen Fehler und will es weg haben, wo liegt hier der Problem?

Ich will jetzt keine Komplettlösung für die Methode nur einen Tip wie ich die Variable auslesen kann.

Danke schon einmal im Voraus.
LG
 
Auf eine lokale Variable kann man nur innerhalb der Methode, in der sie definiert ist, zugreifen. Nicht von anderen Methoden aus. Eine lokale Variable als private zu deklarieren geht auch nicht.
Du musst das anders lösen, etwa durch eine Member-Variable. Definiere die mannschaften-Variable außerhalb von main(). Dann musst du dort noch ein FussballStat-Objekt anlegen und kannst dann von sämtlichen (nicht-statischen) Methoden auf deine mannschaften zugreifen.
 
Hallo,

und Danke dir für die Antwort.

Diese Möglichkeit ist mir auch bekannt gewesen aber ich bin mir nicht sicher ob es der Aufgabenstellung, mit der vorgegebenen Classe "FussballStat", entsprechen würde.

Und du bist dir sicher das es keinen weg gibt auf die Variable zuzugreifen?


LG
 
@ Murray.
Ja, steht so in der Aufgabenbeschreibung drin.
Das ist Quatsch - und syntaktisch falsch, daher nicht übersetzbar.

Die Aufgabe ist so also nicht lösbar. Entweder änderst du die Deklaration der lokalen Variablen (private müsste einfach weggelassen werden) und änderst ebenfalls die vorgebenen Signatur der zu schreibenden Methode, indem du dort mannschaften als Parameter übergibst, oder du machst mannschaften zu einer Member-Variablen der Klasse.
 
Das ganze scheint mir so etwas sinnfrei zu sein.
Allerdings gib es noch einige Variablen an Listen, die nachher nicht mehr auftauchen(Spieler als Array, LinkedList, ArrayList) und // Weitere Methoden ... die evtl. einen indirekten Zugriff ermöglichen. Nur mal so als Anmerkung

mfg
gafktor
 
Das ist ein Tippfehler in der Aufgabenstellung.

Du müsstest sonst sowas machen

Code:
getNTore (int tore, List<Mannschaften> mannschaften) {}
 
Hallo,

Danke erstmal für die Antworten.

@Marcinek:
das mit dem Tippfehler kann gut möglich sein, aber ich weiss es nicht.

@gafktor:
Die Aufgabe a) habe ich eigentlich gemacht. Ist wahrscheinlich keine ideale Lösung, aber Eclipse meckert nicht bei der Initialisierung in der Klasse FussballStat 🙂 und wenn die Methode getSpielerMitNToren() implementiert ist, kann ich dann auch sehen ob die Aufgabe 4a) korrekt ausgeführt wird 😉.

LG
 
Zuletzt bearbeitet:
Hallo

wenn ich deine Aufgabe richtig verstehe brauchst du für Aufgabe b) einen Zugriff auf alle Spieler die in der Liste mannschaften enthalten sind und sollst in Aufgabe a) die Klasse Mannschaft so implementieren das die Klasse Fussballstat lauffähig ist. Was hindert dich also in der Klasse Mannschaft eine (statische) List oder was auch immer zu implementieren und wenn der Konstruktor aufgerufen wird diese entsprechend fort zuschreiben. Dann kannst du in der zu erstellenden Funktion direkt auf die Spielerliste zugreifen und wie auch gewünscht auswerten.

mfg
gafktor
 
Hallo
@gafktor:

was mich daran hindert? - eigentlich garnichts, ausser mein falsches Verständnis für die Aufgabe 😉.
Das mit der statischen Variable ist auch eine Möglichkeit aber würde sie dann nicht zusätzlich zu der anderen Variable "mannschaften" Platz im Speicher verbrauchen?

LG
 
Naja,

wenn die Variable static ist gilt sie für die Klasse mannschaft einmalig, wird also nicht für jede Mannschaft angelegt. Will heissen, du hast genau eine List mit allen Spielern egal, wiewiel mannschaften existieren. Davon abgesehen hält die List ja nicht das Object Spieler sondern eine Referenz auf den Speicherplatz wo der Spieler gerade rumlungert. Du solltest vieleicht darauf achten, diese List nicht bei jedem Konstruktoraufruf auf einen neuen Wert zu setzen. Ich würd mir dazu evtl. eine eigene Funktion basteln -> addSpielerList(Spieler spieler) die ich im Konstruktor ziehen würde.

mfg
gafktor
 

Zurück
Oben