2-dimensionales Array

Hallo,
ich wollte fragen, wie man ein array der Länge 20 mit den Zahlen von 1-3 füllen kann.

In dem Du jedem Arrayelement einen Wert zuweist:

Object[] meinArray;
...
Object meinWert = ...
meinArray[position] = meinWert;
...

Aber die Zahlen müssen zufällig von 1-3 sein und ich bekomme das irgendwie nicht so richtig hin.

http://download-llnw.oracle.com/javase/6/docs/api/ja…

int[] array = new int[20];

for(int j=0;j

Jetzt musst Du nochmal klären, was du genau willst:

1.) Zufallszahlen von 1-3 in das Array schreiben und dann alle Arrayelemente ausgeben.
2.) Die Zahlen von 1-3 wiederholend in das Array schreiben und dann die Arrayelemente zufällig ausgeben.

Die Aufgabe lautet folgendermaßen:
Erzeugen Sie ein Array der Länge 20 vom Datentyp int.
a) Füllen Sie das Array per Zufallsgenerator mit den Werten 1, 2 und 3.

Hallo

du hast doch in deiner vorherigen Frage schon selber den Code gepostet wie man ein Array mit Zufallszahlen von 1-20 füllt. Das ist doch jetzt genau das gleiche…

Gruß

Michael

Ok, dann gehe ich jetzt davon aus, dass Du weißt, dass Du die Arrayelemente zufällig befüllen und nicht zufällig ausgeben sollst.

Wenn Du jetzt meinen Link gelesen hättest, würdest Du die Klasse java.util.Random und deren Methode nextInt(int) kennen.

Damit kann man sich Zufallszahlen als int erzeugen lassen, und zwar bis zu einer Zufallszahlen bis zu einer Höchstgrenze, z.B. „3“. Ich zitiere mal kurz:

Returns a pseudorandom, uniformly distributed int value
between 0 (inclusive) and the specified value (exclusive)

Statt also den Modulo zu benutzen, solltest Du java.util.Random eine Chance geben.

int[] array = new int[20];

for(int i=0;i

Ok, ich versuch’s nochmal etwas ausführlicher…

Die Methodensignatur sieht wie folgt aus:

public int nextInt(int n)

Es ist keine statische Methode, woraus folgt: Dein Aufruf funktioniert nicht. (An dieser Stelle wäre eine Kopie des sicherlich auf der Konsole erschienenen Stacktrace hilfreich gewesen - falls sich deine Anwendung überhaupt übersetzen liess.) Du musst Dir eine Instanz der Klasse erstellen, ein echtes Objekt, dessen Methode Du aufrufen kannst:

Random r = new Random();
r.nextInt(...);

Die von mir zitierten Javadocs sagten ausserdem:

value between 0 (inclusive) and the specified value (exclusive)

Daraus kann man sehen, dass eine untere Grenze bereits angegeben wurde, nämlich „0“.

Aufgrund Deines Pseudonyms verzichte ich jetzt auf eine mathematische Formulierung, nur noch so viel: Du willst keine Zufallszahlen von 0…2, sondern von 1…3.

Das Problem ist, ich habe erst vor kurzem angefangen mich mit der Java-Programmierung auseinanderzusetzen und habe Schwierigkeiten die Bedingungen in einen Programmcode umzusetzen, weil ich meistens einen Fehler erhalte.Jetzt erhalte ich zwar keinen Fehler mehr aber es wird nur die 0 ausgegeben und ich weiß nicht wieso.

int[] array = new int[20];

for(int i=0;i

Ah, jetzt kommen wir weiter. Dein Fehler liegt in diesen beiden Zeilen:

int zahl = r.nextInt(3);
System.out.println(array[zahl]);

Du erstellst Dir eine Zufallszahl von 0…3 (anstatt von (0…2)+1) und speicherst sie in zahl. So weit, so gut. Anschliessend gibst Du das Arrayelement an der Zufallsposition (irgendwas zwischen 0…3) aus, statt diesen Wert dort abzulegen. Und weil das Array zwar initialisiert wurde, die Arrayelemente aber nicht, hat jedes Arrayelement den Standardwert bekommen. Für Deine int ist das „0“, für Objects wäre es null oder andere Werte.

Die Korrektur sieht so aus:

final Random r = new Random(); 
for(int i=0;i

Danke, aber ich verstehe die 2. for-Schleife nicht mit dem Doppelpunkt in der Klammer.
Und wie gibt man jetzt die Zahlen von 1-3 zufällig aus?

Die folgenden Schleifen sind gleich, nur ist die zweite Variante kürzer geschrieben. Ein kleines Syntax-Bonus von Java 1.5+:

1. Variante

for(int i = 0; i 

**2. Variante**


    
    for(int v : array) {
     System.out.println(v);
    }




Die Zahlen müssen nicht \*zufällig\* ausgegeben werden, weil im Array schon an jeder Position eine zufällige Zahl steht. Deshalb werden die Arrayelemente einfach von vorn nach hinten ausgegeben.

Ach das waren bloß 2 Varianten. Ja okay, doch werden jetzt die Zahlen von 0-2 ausgegeben und nicht von 1-3. Wie bekomme ich das denn hin?

Ich hatte den Tip bereits im Text von /t/2-dimensionales-array–2/6018060/11

Ich glaub jetzt hab ich’s :smile:
meinst du so?

int[] array = new int[20];

final Random r = new Random();
for(int i=0;i

Ok das scheint jetzt richtig zu sein.
Jetzt muss ich noch ausgeben, wie oft die Zahlen 1, 2 und 3 im Array vorhanden sind.
Ich hab das mit folgendem Befehl versucht aber das funktioniert leider nicht:

int zahl1 = Arrays.binarySearch(array, „1“);
int zahl2 = Arrays.binarySearch(array, „2“);
int zahl3 = Arrays.binarySearch(array, „3“);

Liegt sicher daran, dass Du ein int[] hast, aber nach einem java.lang.String suchst.