Soll an einer zufälligen Position im Array ein Objekt sein oder an jeder Position ein zufälliges Objekt?Wie kann ich denn ein 2D-Array... Größe soll erstmal nicht relevant sein...zufällig mit einem Objekt befüllen?
du brauchst 2 Schleifen. Die eine für den x-Wert und die andere für den y-Wert
for(int y=0;y<board.length;y++){
for(int x=0;x<board[y].length;x++){
board[x][y]=zufallsfeld;
}
nur an einer zufälligen Position
Wieso Schleifen. Er braucht eine Position, einen zufälligen x-Wert und einen zufälligen y-Wert.du brauchst 2 Schleifen. Die eine für den x-Wert und die andere für den y-Wert
Random zufallsfeldx=new Random();nur an einer zufälligen Position.... aber ich brauche ja eigentlich dann zwei zufallszahlen oder? einmal für x und einmal für y ?!
Feld[][] board = new Feld[5][5];
.null
sein?Ausgehend vom ersten Beitrag ist dein Array vom Typ "Feld"Feld[][] board = new Feld[5][5];
.
Du solltest dir erst mal klar werden, was da jetzt rein soll. Sollen alle 25 Positionen des Arrays eine Instanz von Feld enthalten? Oder sollen alle bis auf eine (zufällig ausgewählte) Positionnull
sein?
Wenn es Instanzen von Feld sind, wie sieht dann dessen Konstruktor aus?
Wir können das nicht wissen.
Gibt es denn die Klasse Feld?Sagen wir mal alle Felder sind erstmal leer... ich will ein Feld mit einem Objekt belegen, irgendein zufälliges Feld.
Ich probiere erstmal den Vorschlag von Kirby_Sike aus
Gibt es denn die Klasse Feld?
Der Code von @Kirby_Sike verwendet ein Array von ints und belegt alle Positionen mit einem zufälligen Wert. Das klingt nicht so, wie das, was du hier beschreibst.
Du schreibst ja explizit "mit einem Objekt". Int ist kein Objekt sondern ein primitiver Datentyp. Bei einem Array int[] sind alle Felder mit dem Wert 0 (ein Integer) vorbelegt. Bei einem Array Feld[] sind alle Felder erst mal null (sie enthalten gar nichts).
Dann mach das genau so. Wie du eine Zufallszahl generierst siehst du ja oben im Beitrag von @Kirby_Sike. Du musst nur beachten, dass die Zufallszahl den maximalen Arrayindex nicht überschreitet. Dafür gibt es nextInt() mit dem Parameter für die Obergrenze, siehe https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt-int-Ich würde es gerne so machen dass ich zwei Zufallszahlen generiere und die beiden blind aufs Feld schmeiße und da kommt mein Objekt hin... Objekt vom Typ Feld
Dann mach das genau so. Wie du eine Zufallszahl generierst siehst du ja oben im Beitrag von @Kirby_Sike. Du musst nur beachten, dass die Zufallszahl den maximalen Arrayindex nicht überschreitet. Dafür gibt es nextInt() mit dem Parameter für die Obergrenze, siehe https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt-int-
Random zufallsfeldx=new Random();
Random zufallsfeldy=new Random();
Random[][] board = new Random[zufallsfeldx][zufallsfeldy];
müsste das nicht in etwa so funktionieren?
void belegeBoardZufaellig(Feld[][] board, Feld feld) {
Random zufall = new Random();
int zeile = zufall.nextInt(board.length);
int spalte = zufall.nextInt(board[zeile].length);
board[zeile][spalte] = feld;
}
Müsste das nicht in etwa so funktionieren?
Random random = new Random(); // Erzeuge einen Zufallszahlengenerator mit dem Namen random
int zufallszahl = random.nextInt(); // Verwende random, um eine zufälligen Zahl zu erzeugen
Random[][] board; // damit deklarierst du ein Array vom Typ Random
@LucaToni Da Du den Code ja fast dastehen hattest, hier mal eine mögliche Lösung (wenn Du es selbst probieren willst, lass den Spoiler zu)
Java:void belegeBoardZufaellig(Feld[][] board, Feld feld) { Random zufall = new Random(); int zeile = zufall.nextInt(board.length); int spalte = zufall.nextInt(board[zeile].length); board[zeile][spalte] = feld; }
Der wesentlich interessantere Punkt wäre, das Board als Klasse zu modellieren, um von diesem Array-Gedöns zu abstrahieren.
public class wortmatrix
{
private int breite,hoehe;
String[][]wort;
/**
* Konstruktor für Objekte der Klasse wortmatrix
*/
public wortmatrix()
{
}
public void beispielMethode() //methode ohne Parameter
{
Random zufallszahl=new Random(); //zufallszahlgenerator
int zufallsx=zufallszahl.nextInt(); //meine 1.zufallszahl
int zufallsy=zufallszahl.nextInt(); //meine 2.zufallszahl
String wort2="hallo"; //mein String wort2
wort[zufallsx][zufallsy]=wort2; //das wort2 an die zufällige stelle setzen
}
String[][] worte = new String[5][5];
Du musst nur beachten, dass die Zufallszahl den maximalen Arrayindex nicht überschreitet. Dafür gibt es nextInt() mit dem Parameter für die Obergrenze, siehe https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt-int-
Wenn du ein Stringarray möchtest, dann musst du schon eines deklarieren:
Java:String[][] worte = new String[5][5];
Du versuchst einem Array "wort" etwas zuzuweisen, dass es nicht gibt (zumindest sehen wir es nicht, falls es eine Instanzvariable sein sollte).
Außerdem gilt weiterhin:
Wenn du ein Stringarray möchtest, dann musst du schon eines deklarieren:
Java:String[][] worte = new String[5][5];
Du versuchst einem Array "wort" etwas zuzuweisen, dass es nicht gibt (zumindest sehen wir es nicht, falls es eine Instanzvariable sein sollte).
Außerdem gilt weiterhin:
Bekomme ich wegen dem nextInt() und den Rändern eine Nullpointer?
int[] intArr; // Array deklariert
intArr = new int[10]; // und mit einer Länge von 10 initialisieren
Nein. Du hast das Array zwar deklariert, aber nicht initialisiert. Beispiel:
Das solltest du aber wissen, im ersten Beitrag hast du es noch richtig gemachtJava:int[] intArr; // Array deklariert intArr = new int[10]; // und mit einer Länge von 10 initialisieren
public class wortmatrix
{
// Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
private int breite=10;
private int hoehe=10;
String[][]wort;
/**
* Konstruktor für Objekte der Klasse wortmatrix
*/
public wortmatrix()
{
wort=new String[breite][hoehe];
}
/**
* Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
*
* @param y ein Beispielparameter für eine Methode
* @return die Summe aus x und y
*/
public void beispielMethode()
{
Random zufallszahl=new Random();
int zufallsx=zufallszahl.nextInt(10);
int zufallsy=zufallszahl.nextInt(10);
String wort2="hallo";
wort[zufallsx][zufallsy]=wort2;
}
}
Wie sieht denn deine main() dazu aus?Hab immer noch eine Nullpointer
Wie sieht denn deine main() dazu aus?
Ich hatte nichts in der main ^^ jetzt funktioniert das soweit...
Meine main ist einfach nur eine sysout die hallo ausgeben soll an der zufälligen stelle.
Die Compiler-Fehler wurden nach dem letzten Kompilieren wohl nicht aus dieser Fehleranzeige gelöscht deswegen dachte ich die ganze Zeit ich habe immernoch eine Nullpointer.
DANKE AN ALLE
Ganzen Tag für eine Methode... ist schon lang oder ?
Naja, schon einigermaßen lang. Wird schon noch werden. Wichtig ist halt, dass du bei so einer einfachen Sache zu 100% verstanden hast was du da machst. Falls das nicht der Fall ist unbedingt nachfragen!Ganzen Tag für eine Methode... ist schon lang oder ?