Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe eine frage
und hoffe das ihr mir helfen könnt
in meinen Konstruktor nurtze ich die variabel(array) grundstück mit [kartengröße.width][kartengröße.height]
weil ich nicht weiss wie groß die karte wird
jetzt meine frage wie bekomme ich die variabel aus dem konstruktor in die klasse ohne das ich ein array machen muss was eine feste größe hat sonder nur die größe der karte
das ziel ist es grundstück[][] mit seinen inhalt in der metode unten zu nutzen
Java:
package Stadt;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.lang.reflect.Array;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.text.Position;
import Gui_Fenster.HauptFenster;
public class KartenÜbersicht extends JPanel {
public KartenÜbersicht(Dimension kartengröße) {
setLayout(null);
KarteErstellen(kartengröße);
}
public void KarteErstellen(Dimension kartengröße){
ImageIcon bild_FreiesGrunstück = new ImageIcon(getClass().getResource(
"..//Gui_Fenster//Grundstück_lehr64.png"));
Grundstück[][] grundstück = new FreiesGrundstück[kartengröße.width][kartengröße.height];
JLabel[][] l_karte = new JLabel[kartengröße.width][kartengröße.height];
for (int a = 0; a < kartengröße.width; a++) {
for (int b = 0; b < kartengröße.height; b++) {
grundstück[a][b] = new FreiesGrundstück();
if (grundstück[a][b].ItemID == 0) {
l_karte[a][b] = new JLabel(bild_FreiesGrunstück);
l_karte[a][b].setBounds(a * 64, b * 64, 64, 64);
add(l_karte[a][b]);
l_karte[a][b].repaint();
}
}
}
}
public void StartRandom(Dimension xy) {
for (int a = 0; a < xy.getWidth(); a++) {
for (int b = 0; b < xy.getHeight(); b++) {
}
}
}
}
Du kannst ein noch nicht festgelegtes Array deklarieren und dieses im Konstruktor überschreiben. Oder du nimmst eine ArrayList, die nur vernachlässigbare Performanceverluste verursacht.
ich habe auch schon so gedacht nur wolte ich so wenig wie möglich leistung verlieren wiemöglich. wenn ich karte nur 200*200 ist sind das schon knap 2 sek im späteren verlauf wir das min noch mal 10 und das dann auf 18 karten
d h die zeit wäre bei ca. 6 min und ich weis keinen der so lange warten will für 1 spiel
das ganze soll eine karte werden wo man jedes feld anklicken kann und eine aktion machen kann
es soll erweiterbar werden so, das wenn man am karten ende angekommen ist sich die karte um die gleich größe erweitert in die richtung wo man aneckt.
alle häuser sind so eingestellt das sie sich auf der karete nach bestimten bedingungen automatich erweitern so das die lehren grunstücke nach und nach bebaut werden.
das spiel soll auf 18 oder 19 karten laufen die sich bis zu 10 mal verdoppeln können.
mir ist grade aufgefallen das, das geht meine frage ist nur hat das iwelch negativen auswirkungen oder kann man das einfach so machen
ich habe bis her gelernt das man ein array IMMER vorher einen wert geben muss deswegen verwird mich das jetzt etwas
Java:
public class KartenÜbersicht extends JPanel {
Grundstück[][] grundstück;
JLabel[][] l_karte;
public KartenÜbersicht(Dimension kartengröße) {
setLayout(null);
KarteErstellen(kartengröße);
}
public void KarteErstellen(Dimension kartengröße){
ImageIcon bild_FreiesGrunstück = new ImageIcon(getClass().getResource(
"..//Gui_Fenster//Grundstück_lehr64.png"));
Grundstück[][] grundstück = new FreiesGrundstück[kartengröße.width][kartengröße.height];
JLabel[][] l_karte = new JLabel[kartengröße.width][kartengröße.height];
for (int a = 0; a < kartengröße.width; a++) {
for (int b = 0; b < kartengröße.height; b++) {
grundstück[a][b] = new FreiesGrundstück();
if (grundstück[a][b].ItemID == 0) {
l_karte[a][b] = new JLabel(bild_FreiesGrunstück);
l_karte[a][b].setBounds(a * 64, b * 64, 64, 64);
add(l_karte[a][b]);
l_karte[a][b].repaint();
}
}
}
}
public void StartRandom(Dimension xy) {
for (int a = 0; a < xy.getWidth(); a++) {
for (int b = 0; b < xy.getHeight(); b++) {
}
}
}
}
(anderung ich habe in zeile 2 und 3 die arrays ohne festen wert erstell und erst im konstruktor den wert übergeben)
[EDIT]
@Gucky
ja das wird es wohl werden deswegen wolte ich auch wissen wie man speicherspart da mir das mit den array zuviel war/ist und es kann sein das das noch 1-2 einträge hierschreiben werde, da ich mir alles allein breibingen muss und sich ab und an mal ein parr fragen stellen.[/EDIT]
Müssen tut man gar nichts. Du kannst das array auch uninitialisiert lassen, dann geben die meisten compiler nur eine Warnung, dass das Feld nicht initialisiert wurde. Man läuft dann natürlich Gefahr in eine NullPointerException zu laufen, wenn das Feld nicht initialisiert wurde.
Das Ganze im Konstruktor zu machen, ist schon ok, solange die Klasse keine statischen Funktionen hat und die Liste nicht statisch ist, da man auf die Liste sowieso nicht vor der Instanzierung zugreifen kann.