zufallsprüfung

Status
Nicht offen für weitere Antworten.

mermen

Aktives Mitglied
hi!

ich habe eine zufallszahl, die immer wieder neu generiert wird....

nun möchte ich die zufallszahl überprüfen, ob sie in den letzten "drei" malen, wo eine zufallszahl generiert wurde, schon mal vorkam.... und wenn, dann soll natürlich eine andere zufallszahl generiert werden!!!!

hat da einer nen guten vorschlag???....wenn ich anfange etwas zu schreiben, wird das immer ellenlang....ich finds dann auch irgentwie zu kompliziert......
 

The_S

Top Contributor
Speichere dir die letzten drei Zahlen in einem Array und überprüfe dann z. B. in einer Schleife ob die neue Zufallszahl bereits existiert.
 

mermen

Aktives Mitglied
hi hobbit!
hoffe dein urlaub war angenehm!!??.. ;-)

ja....das hab ich mir gedacht...das array muß ich dann als klassenarray mahen, damit ich nicht nach ende der methode ein leeres array habe... aber....

wie füge ich...wenn das array voll ist (drei zahlen gespeichert sind) eine neue zahl hinein...so das die zwei letzten immer noch drin ist...nur die dritte gelöscht wird!?...

auch in einer schleife, wo ich den zaehler fürs array dann zurücksetze!?...
 

L-ectron-X

Gesperrter Benutzer
Code:
//Array-Inhalt eins nach vorn verschieben und neuen Wert hinten speichern
int[] lastNumbers = new int[3];
...

for(int i = 0; i < lastNumbers.length-1; i++) {
   lastNumbers[i] = lastNumbers[i+1];
}

lastNumbers[lastNumbers.length-1] = (int)Math.random()*100; //neue Zufallszahl ermitteln und speichern
 

Murray

Top Contributor
Du musst Dir zusätzlich zum Array noch den nächsten zu verwendenden Index (also die Position im Array merken). Dieser Index wird mit jeder abgelegten Zahl um eins erhöht und - wenn er dabei grösser als die letzte Array-Position wird - wieder auf Null gesetzt. So wird immer die älteste Zahl überschrieben.
 

mattulla

Bekanntes Mitglied
hier mal eine Methode mit der es klappen sollte (hab sie allerdings nicht ausprobiert). Vorraussetzung hier ist, dass deine Zufallszahl nicht -1 sein kann. Wenn dem wohl so ist musst einfach eine andere Zahl einsetzen welche deiner Zufallszahl nicht entsprechen kann.

Code:
    public int einfuegen(int zahl) {
    	for(int i = 0; i < array.length; i++) {
    		if(array[i] == -1) {
    			array[i] = zahl;
    			return i;
    		}
    	}
    	for(int i = 0; i < array.length; i++) {
    		if(i == array.length - 1) {
    			array[i] = zahl;
    		}
    		else {
    			array[i] = array[i+1];
    		}
    	}
    	return 3;
    }

Gruesse
mattulla
 
B

bygones

Gast
warum so kompliziert ?! ich würds so machen
Code:
public class ZufallsKlasse {
  private static final int MAX_NUMBER = 3
  private int[] letzteZufallszahlen = new int[MAX_NUMBER];
  private int counter = 0;

  //.....

  public void newNumber(int n) {
    counter = counter == MAX_NUMBER ? 0 : counter + 1;
    letzteZufallszahlen[counter] = n;
  }

  public int getCurrentNumber() {
    return letzteZufallszahlen[counter];
  }
}
 

The_S

Top Contributor
Du speicherst dir den zuletzt verwendeten Index in welchem deine Zahl zuletzt eingefügt wurde. Den erhöhst du dann immer um eins und speicherst dort deine neue Zufallsazahl. Ist der Index größer als 2 wird er auf 0 gesetzt

[edit] ich sollte nicht mitten im Posten anfangen was anderes zu machen und der Urlaub war schön, hatten nur ein bisschen schlechtes Wetter ;)
 

mermen

Aktives Mitglied
Code:
public int zufallszeile()
	{
		int anzahlWoerter = woerter.size();
		Random zufall = new Random();
		
		
		zufallszahl = zufall.nextInt(anzahlWoerter);
		
		for (int i = 0; i <= 3; i++)
		{
			
			if (zahl[i] == zufallszahl)
			{
				zufallszeile();
			}
			else if (zahl[i] == -1)
			{
				zahl [i] = zufallszahl;
			}
			else
			{
				if (zufallszaehler >= 3)
				{
					zahl [2] = zufallszahl;
				}
				zahl [zufallszaehler - 1] = zufallszahl;
			}
		
			
			
		}
		
		if (zufallszaehler >= 3)
		{
			zufallszaehler = 0;
		}
		else
		{
			zufallszaehler++;		
		}
		return zufallszahl;
	}

also ich hab das nun so gemacht...aber wenn ich die if-anweisungen durchlaufe geht er nicht in die zeile, woe er fragt : else if (zahl == -1) ......
-1 wäre doch meine ausgabe, wenn an der "angegebenen" stelle im array nichts steht!?...oder???
also müßte das doch klappen!!??
 

Murray

Top Contributor
Hast Du die Array-Elemente denn explizit mit -1 vorbelegt? Wenn nicht, dann sind sie initial 0 und nicht -1.
 

mermen

Aktives Mitglied
zeile 9 hab ich nun so geändert das es passt.... (der fehler kam nämlich!!) danke @ L-ectron-X


wie setzte ich denn das array auf -1 wie murray beschrieben hat...
 

Murray

Top Contributor
Code:
int[] zahl = new zahl[3];
for ( int i=0; i<zahl.length; i++) zahl[i] = -1;
;

Oder

Code:
int[] zahl = new int[]{-1, -1, -1};
 

mermen

Aktives Mitglied
geht das nicht auch automatisch??

oder muß ich die vorher so festlegen??

lege ich denn mit dem drei mal -1 auch nur drei objekte im array an!?...
 

mermen

Aktives Mitglied
ja, variablen...aber ihr wisst ja was ich meine....!! ;-)

trotzdem danke, hab das nun hinbekommen!! ;-))))))
 

mermen

Aktives Mitglied
ja, variablen...aber ihr wisst ja was ich meine....!! ;-)

trotzdem danke, hab das nun hinbekommen!! ;-))))))
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben