Elemente zufällig in ein Array verteilen

Lain_Iwakura

Mitglied
Hi,


ich hab folgendes Problem:

Ich habe ein 2D-Array, mit zum Beispiel 8x8 Elementen.
Dieses Array wird zufällig mit 0 und 1 gefüllt.
Aber die 0 darf nur 8 mal vorkommen.

Mein Versuch:


Java:
int a=0;
int x = 8 ;
int y = 8;
         
          int[][] array  = new int [x][y];
       
        
         for(int i=0; i<x; i++)
          {
              for(int n=0; n<y; n++)
              {
                array[i][n] = (int) Random(0,1);  
                  
                 
                if(array[i][n] == 0)
                  {
                      a++;
                      if(a > 8)
                      {
                          array[i][n] = 1;
                      }
                  }
                  
                
                  System.out.print(array[i][n]);
              }
          }

//ausserhalb von main
 public static int Random(int minval, int maxval){
     
       return minval + (new java.util.Random()).nextInt(maxval-minval+1);
      }

Was dann aber natürlich immer rauskommt, ist dann eine Zahlenkette, mit sehr vielen 1 hinten, weil die ersten 8 Nullen schon verbraucht werden.

Mir will aber partout nicht einfallen, wie ich diese Nullen unter die ganzen 1 vermischen soll.
Ich hatte höchstens die Idee, für diese Nullen ein extra Array mit 8 Nullen zu schreiben, dessen Elemente dann in das Feld verstreut werden. Die Position soll zufällig bestimmt werden.
Würde diese Idee Sinn machen ?

Würde mich über Tipps freuen^^
 
S

SlaterB

Gast
schau dir an was die Forum-Code-Formatierung aus deiner Methode Random macht,
Methoden NIE groß schreiben und schon gar nicht wie bekannte Klassen benennen

-------

du kannst wie bei Lottozahlen mehrfach Werte zwischen 0 und 64 wählen bzw. zwei Zufallszahlen von 0 bis 8 und an diesem Index die 0 setzen (in etwa deine Idee, ja),
auf doppelte Ziehungen achten

komfortabel, auch bei Lotto, ist Einfügen aller 64 Werte, 8x 0, 56x 1, in eine Liste,
dann Collections.shuffle() und die nun zufällig verteilten 64 Werte der Reihe nach ins Array schreiben
 
Zuletzt bearbeitet von einem Moderator:

KSG9|sebastian

Top Contributor
Warum änderst du den Random nicht?

- es gibt 64 Stellen zu füllen
- maximal 8x mit einer 0
- minimal 56x mit einer 1

=> Nullen : Einsen > 1 : 7

Code:
double rand = Math.random();

if(rand < 0.7){
 arr[a][b] = 1;
} else {
 arr[a][b] = 0;
}

Ich versteh denn Sinn in der Aufgabe aber nicht so ganz?

Ach...Methoden werden in Java klein geschrieben mit Camel-Case -> calculateNextRandomBetween(int min, int max)

Du kannst auch die Arrays füllen und anschließende shuffeln..aber das Ergebnis bleibt gleich - viele Einsen, wenig Nullen
 
S

SlaterB

Gast
@KSG9|sebastian
klingt so nach vollständiger Lösung, aber mit diesem Random können genausogut 5 oder 12 0en eingefügt werden, nicht nur 8,
gut, nach oben wohl begrenzt, dennoch Nachbearbeitungsbedarf

1:7 ist auch nicht gerade bei 0.7 ;)
 

Lain_Iwakura

Mitglied
@Sebastian

Hab deinen Code eingefügt (und angepasst usw....)
Math.Random() steht auch ausserhalb der Schleife.

Aber jetzt kommen entweder nur 0 und nur 1 raus.
Und das natürlich dann mit verschiedenen Wahrscheinlichkeiten.
 
S

SlaterB

Gast
was wohl an
> Math.Random() steht auch ausserhalb der Schleife.
liegt und offensichtlich nicht zwingend gefordert/ richtig ist,
nur ein Zufallsereignis auf alle anwenden, das kann ja nicht gut gehen
 

Lain_Iwakura

Mitglied
ok , dann hatte ich das oben missverstanden.
ich musste das noch etwas ändern, aber mit Sebastians-Code klappt es.
das " rand < 0.7" kannte ich noch nicht (also wie man die Wahrsceinlichkeit ändern kann.

thx^^
 
S

SlaterB

Gast
die Wahrscheinlich ist bisschen hoch, ~ jedes dritte Element ne 0, damit kommst du wahrscheinlich nahezu immer auf genug 0en
(die Wahrscheinlichkeit dafür kann man wieder ausrechnen, bestimmt 99,99999..%)
allerdings werden die sich schon weit vorne ansammeln, hinten bleibt es recht 0-frei

vorher hattest du ja 50%, also 0,5 implementiert, 1:7 wäre 0.875,
dann wie gesagt mit dem Risiko dass es auch mal weniger als acht 0en sind
 

Lain_Iwakura

Mitglied
ich versuch's grad mit ner If-Abzweigung wieder wett zu machen.
Klappt aber doch nicht so ganz,wie es vorhin den Anschein hatte.
Der spuckt ab und zu immer noch weniger als 8 Nullen aus...
Aber es sind zumindest nicht mehr mehr als 8 und die Nullen sind schöner verteilt.
 
Zuletzt bearbeitet:

KSG9|sebastian

Top Contributor
Ok, ich dachte der Code ist so schlecht das man sieht das es keine fertige Lösung sein soll..dafür gibt's doch immer auf die Finger. :)

Die 70% sind auch nicht ganz korrekt..ich wollte doch nur Ansätze bieten :)

** Edith **
Natürlich sind es nicht immer 8 Nullen..die Chance das der Zufallsgenerator nur 5x eine Null "errechnet" ist doch auch relativ hoch :)
 
N

nillehammer

Gast
Das mit Random ist der falsche Ansatz. Wenn die Wertemenge festgelegt ist (hier 8 Nullen und 56 Einsen), dann braucht man sie genau so. Fülle also erst eine Liste mit 8 Nullen und 56 Einsen. Jetzt hast du einen "Topf" aus dem Du ziehen kannst. Leider noch nicht zufällig verteilt. Wie das geht, hat SlaterB schon angedeutet (auch, wenn manchmal etwas kryptisch, lohnt es sich, seine Posts zu lesen :D). Du musst die Elemente in dem Topf mischen (engl: to shuffle). Da gibt es im API schon eine tolle Methode für
Code:
Collections.shuffle
. Nun hast Du den Topf mit zufällig verteilten Elementen. Dann einfach diesen Topf von vorne nach hinten durchiterieren und auf Deinen Array verteilen. Wie findest Du den richtigen Index für die Übertragung aus der eindimensionalen Liste in den zweidiemnsionalen Array? Da helfen Dir die Ganzzahldivision mit
Code:
/
sowie er "Resterechner" Modulo
Code:
%
. Das ganze in lauffähigen Java-Code gegossen, sieht dann so aus:
Java:
public class AppTest {

  public static void main(String[] args) {

    final List<Integer> values = createOneZeroList(8, 64);

    final int[][] intTable = createIntTable(values);

    System.out.println(Arrays.deepToString(intTable));
  }

  public static List<Integer> createOneZeroList(final int zeroAmount,
      final int totalElemAmount) {

    final List<Integer> result = new ArrayList<Integer>(totalElemAmount);

    // gewünsche Anzahl Nullen zur List adden
    for (int i = 0; i < zeroAmount; i++) {

      result.add(0);
    }

    // restliche Einsen adden
    for (int i = 0; i < totalElemAmount - zeroAmount; i++) {

      result.add(1);
    }

    System.out.println(result.size());

    // Liste "mischen"
    Collections.shuffle(result);

    return result;

  }

  public static final int[][] createIntTable(final List<Integer> values) {

    final int dimension = 8;

    final int[][] result = new int[dimension][dimension];

    for (int i = 0, valuesSize = values.size(); i < valuesSize; i++) {

      final int rowIndex = i / dimension;

      final int colIndex = i % dimension;

      result[rowIndex][colIndex] = values.get(i);
    }

    return result;
  }
}
Der Code ist jetzt genau auf Deinen Anwendungsfall programmiert. Man könne ihn sicher noch flexibler machen, indem mehr Parameter übergebbar macht.
 
Zuletzt bearbeitet von einem Moderator:

Lain_Iwakura

Mitglied
ok erstmal danke ! oO"

Ich habs eben schnell eingefügt, der zeigt mir jedoch überall rote Kringel. Ich werds nachher mir genauer ansehen.
Aber die Idee mit den Töpfen klingt logisch. Hatte vorhin in meinem Eröffnungsbeitrag so etwas ähnliches mit dem Extra-Array gemeint, ging jedoch in die falsche Richtung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
A Elemente in einem Array Java Basics - Anfänger-Themen 5
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
T SCC Elemente Java Basics - Anfänger-Themen 0
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L String zerlegen & elemente hinzufügen Java Basics - Anfänger-Themen 5
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
S Elemente in Liste einfügen Java Basics - Anfänger-Themen 2
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
M Elemente in einer ArrayList einander zuordnen. Java Basics - Anfänger-Themen 18
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
W Elemente aus einer anderen GUI steuern! Java Basics - Anfänger-Themen 13
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
R Elemente eine Liste im Ring schliessen Java Basics - Anfänger-Themen 9
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
1 Wie addiert man die Elemente einer Verketteten Liste? Java Basics - Anfänger-Themen 5
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
gamebreiti Gui menu ArrayList Elemente wiedererkennen Java Basics - Anfänger-Themen 3
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7
W wie legt man die elemente der liste k Mal fest ? Java Basics - Anfänger-Themen 7
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
C ArrayList - überschreibt Elemente Java Basics - Anfänger-Themen 7
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Elemente von 2 Arrays vergleichen Java Basics - Anfänger-Themen 12
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
M aus x Elementen y Elemente auswählen Java Basics - Anfänger-Themen 6
J Eingabe Elemente Aktivieren Java Basics - Anfänger-Themen 2
R Best Practice Elemente aus ArrayList entfernen (performant) Java Basics - Anfänger-Themen 6
G String Elemente auf Zahlen Überprüfen Java Basics - Anfänger-Themen 21
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
T Wieviel Array-Elemente Java Basics - Anfänger-Themen 19
M Elemente im DefaultListModel separat auslesen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P BitSet- Objekt- Anzahl der Elemente bestimmen Java Basics - Anfänger-Themen 2
S JPA / Elemente einer Liste ansprechen Java Basics - Anfänger-Themen 5
B mit einem Iterrator elemente aus einer liste löschen Java Basics - Anfänger-Themen 3
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10
H Redundante Elemente aus ArrayList entfernen Java Basics - Anfänger-Themen 3
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
A Elemente aus Liste entfernen Java Basics - Anfänger-Themen 5
A Elemente in HashSet enthalten oder nicht Java Basics - Anfänger-Themen 6
C Elemente im StringBuffer ersetzen Java Basics - Anfänger-Themen 19
E Elemente einer (öffentlichen) ArrayList in einer anderen Klasse zu einer ArrayList dazu fügen. Java Basics - Anfänger-Themen 7
L ArrayList Elemente verknüpfen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben