[BlueJ] Arrays aus anderen Klassen verwenden?
Ich habe ein Array wo die Werte für bestimmte Eigenschaften drinstehen, wie könnte ich in einer Anderen Klasse also abfragen ob z.b bei Werte[4] >= 3 wahr ist?
Hängt von deiner Klassenstruktur ab. Ich bräuchte den Code der Klasse, auf die zugegriffen wird, und den der Klasse, von der aus du zugreiufen möchtest.
ja gut, die Klasse ist wirklich enorm lang, welchen Teil brauchst du den? Also welchen Teil der Klasse wo sich das Array befindet
Dann paste die auf pastebin und verlinke das hier, das dürfte einfacher sein, als dass ich hier Codeteile raussuche ohne sie zu kennen.
Hier brauche ich den Array: https://pastebin.com/UEzJNEZ6
Hier befindet er sich: https://pastebin.com/454q7QJR
Es ist der Array "Felder"
2 Antworten
Mach dein Array public (diesen Schritt brauchst du nicht, wenn deine andere Klasse im selben Paket liegt):
public int[] freifelder;
public int[] felder;
Erstelle in der anderen Klasse eine Instanz dieser Klasse:
SuntjmacheraMap suntj = new SuntjmacheraMap(...);
Und dann greif einfach über die Instanz auf das Array zu:
if (suntj.freifelder[4] >= 3) { ... }
--
Das ist übrigens der unnötig komplizierteste Code den ich jemals gesehen habe.
Benutz für deine Buttons doch einfach ein Array anstatt 36 verschiedene einzelne Variablen zu erstellen??
Dann brauchst du auch keine 36 if-Statements, sondern kannst einfach den Knopf im Array ändern, der sich am Index x befindet.
ja die Idee mit den Arrays ist mir irgendwie es heute gekommen, ich frage mich auch wie mir das nie aufgefallen ist
Ich hab nur noch ein Problem, ich will die Klasse SuntjmacheraMap gar nicht aufrufen. Kann ich irgendwie aufs Array zugreifen ohne sie zu starten??
Du kannst die Arrays static machen, dann kannst du direkt über die Klasse darauf zugreifen, ohne eine Instanz erzeugen zu müssen.
Beachte aber, dass sich dann alle Instanzer der SuntjmacheraMap dieses eine Array teilen. Aber wenn du eh nur eine Instanz dieser Klasse machst ist das kein Problem.
public static int[] freifelder;
public static int[] felder;
Zugreifen:
if (SuntjmacheraMap.freifelder[4] >= 3) { ... }
bist du ein Magier? Was meinst du genau mit "nur eine Instanz dieser Klasse machst" Darf ich nur mit einer weiteren Klasse hierauf zugreifen?
Wenn du
SuntjmacheraMap suntj = new SuntjmacheraMap(...);
machst, dann erstellst du eine neue Instanz der Klasse SuntjmacheraMap. Dafür benutzt man das "new" - um eine Instanz einer Klasse zu erstellen. Du erstellst sozusagen ein Objekt (suntj) nach einem bestimmten Bauplan (SuntjmacheraMap).
Wenn du also mal zwei Instanzen von SuntjmacheraMap erstellst:
SuntjmacheraMap suntj1 = new SuntjmacheraMap(...);
SuntjmacheraMap suntj2 = new SuntjmacheraMap(...);
Dann würden diese beiden Instanzen das selbe felder-Array verwenden, wenn du das Array static machst.
Ersteinmal:
Du kannst deinen Code übersichtlicher gestalten, indem du Teile in Methoden auslagesrt.
Wenn zudem immer nur ein Wert wahr sein kann, dann kannst du ein switch verwenden statt eine Reihe von ifs.
Zu deinem Problem:
public class SuntjmacheraCPU
{
SuntjmacheraMap Suntj;
public SuntjmacheraCPU()
{
Suntj = new SuntjmacherMap();
}
public void StartpunktCPU(int startpunktyou)
{
int random = (int) Math.floor(Math.random() * 2); //Nummer zwischen 0 und 36
int y = random;
Suntj.felder[y] = 3;
}
}
Ich habe das so angepasst, wie es funktionieren sollte. Voraussetzung ist, dass beide Klassen im selben Paket liegen, da du bei deinem Array "felder" die Sichtbarkeit nicht explizit angegeben hast und der Array somit paketsichtbar ist.
Gut, die kann er ja selber setzen. Oder er definiert sich einen Default-Konstruktor.
dankeeeee