[BlueJ] Arrays aus anderen Klassen verwenden?

Destranix  05.11.2022, 14:15

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.

verreisterNutzer 
Fragesteller
 05.11.2022, 14:16

ja gut, die Klasse ist wirklich enorm lang, welchen Teil brauchst du den? Also welchen Teil der Klasse wo sich das Array befindet

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
verreisterNutzer  05.11.2022, 14:30

dankeeeee

1
verreisterNutzer  05.11.2022, 14:38
@MrAmazing2

Ich hab nur noch ein Problem, ich will die Klasse SuntjmacheraMap gar nicht aufrufen. Kann ich irgendwie aufs Array zugreifen ohne sie zu starten??

0
MrAmazing2  05.11.2022, 14:40
@verreisterNutzer

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) { ... }
1
verreisterNutzer  05.11.2022, 14:47
@MrAmazing2

bist du ein Magier? Was meinst du genau mit "nur eine Instanz dieser Klasse machst" Darf ich nur mit einer weiteren Klasse hierauf zugreifen?

0
MrAmazing2  05.11.2022, 15:01
@verreisterNutzer

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.

1
verreisterNutzer  05.11.2022, 14:36

ja die Idee mit den Arrays ist mir irgendwie es heute gekommen, ich frage mich auch wie mir das nie aufgefallen ist

1

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.

MrAmazing2  05.11.2022, 14:33

Der Konstruktor von SuntjmacherMap erwartet zwei Parameter.

1
Destranix  05.11.2022, 14:34
@MrAmazing2

Gut, die kann er ja selber setzen. Oder er definiert sich einen Default-Konstruktor.

2