Array befüllen & auf doppelte werte prüfen

Supra

Bekanntes Mitglied
Moin,
villeicht liegt es schon an der Uhrzeit, dass ich nicht mehr klar denken kann. Aber ich kriege keine Bedingung zustande die prüft ob mein Array einen Wert schon enthält während ich es befülle. Wenn der schon vorhanden ist soll er eine neue zufällige Zahl nehmen.

Java:
	public void ziehung()
	{
		Random zufallsGenerator = new Random();
		int zahl;
		for(int i = 0; i<zahlen.length; i++)
		{
			do
			{
				zahl = zufallsGenerator.nextInt(zahlenBereichEnde);
				zahlen[i] = zahl;
			}
			while(zahl < zahlenBereichAnfang);
		}
	}

Brauche nun eine Bedingung. 🙁
 
Eine direkte Möglichkeit fällt mir dazu nicht ein.
Um die Bedingung zu überprüfen müsstest du ja jedes Mal alle schon gezogenen Zahlen anschauen.
Eine Möglichkeit wäre das Ganze über eine Menge zu lösen, da es in dieser keine doppelten Werte geben kann.

Bsp.:

Java:
import java.util.Set;
import java.util.HashSet;

public void ziehung()
{
   Set<Integer> gezogen = new HashSet<Integer>();
   Random zufallsGenerator = new Random();
   int zahl;
   for(int i = 0; i<zahlen.length; i++)
            {
                do
                {
                    zahl = zufallsGenerator.nextInt(zahlenBereichEnde);
                    if (!gezogen.contains(zahl)) {
                       zahlen[i] = zahl;
                       gezogen.add(zahl);
                    } else
                       zahl = -1; // irgendein Wert der den Anfang des Zahlenbereichs unterschreitet.
                }
                while(zahl < zahlenBereichAnfang);
            }
        }

Oder du benutzt direkt eine Menge, befüllst sie solange mit Werten bis die Größe der Menge gleich der Länge des Arrays ist und wirfst die Werte dann in das Array.
 
Hm key, genau das hatte ich mir auch gedacht, mit den gezogenen Zahlen anschauen. Leider sieht das jetzt für mich ein wenig befremdlich aus z.B.
Java:
 zahlen[i] = zahl;
diese Zeile. Aber du bringst mich auf eine Idee, kann ich dies auch mit einer Liste machen?
 
Ja leider macht er aus so komische Sonderzeichenketten.
Eine Liste kann auch doppelte Werte aufnehmen, eine Menge nicht.
Du kannst aber leicht aus einer Menge eine Liste bauen.
Java:
Set<Integer> set = new HashSet<Integer>();

List<Integer> list = new LinkedList<Integer>(set);
;
 
Java:
	public void ziehung()
	{
		Random zufallsGenerator = new Random();
		int zahl;
		for(int i = 0; i<zahlen.length; i++)
		{
			do
			{
				zahl = zufallsGenerator.nextInt(zahlenBereichEnde);
				if(zahlenListe.contains(zahl))
				{
					
				}
				else
				{
					zahlen[i] = zahl;
					zahlenListe.add(zahl);					
				}

			}
			while(zahl < zahlenBereichAnfang);
		}
	}


So habe ich das jetzt, aber es kommt ab und zu vor das er die 0 doppelt füllt.

Aber vielen Dank, das reicht mir vorerst.
 
Zuletzt bearbeitet:
Du könntest zwei Schleifen ineinander verschachteln. Die eine tickert immer einen Index weiter und speichert den dazugehörigen Wert in einer Variablen. Die andere vergleicht den aktuellen Wert mit allen noch kommenden. (Wenn ein Wert doppelt vorhanden sein sollge, dann muss die Schleife den Rest mit allen anderen Werten vergleichen) Sollte der Wert mit mit dem in der Variablen übereinstimmen, so wird der Wert aus dem Array überschrieben, mit einem anderen Wert und dieser erneut geprüft. Solange, bis der Wert nur einmal vorhanden ist. Du musst natürlich dafür sorgen, dass auch genpgend Werte vorhanden sind um das Array zu befüllen.

Gruß
Gucky
 
Besser spät als nie 🙂 könnte so aussehen:
Java:
import java.util.Scanner;
/**
* Keine Doppelten Einträge im Array
* @author JavaUndC-Prog
*
*/
public class KeinDoppeltImarray {
    public static void main(String[] args) {
        int[] array = new int[5];
        Scanner scan = new Scanner(System.in);
        for(int i = 0; i < array.length; i++) {
            System.out.println("Bitte int eingeben...");
            array[i] = scan.nextInt();
           
            for(int j = 0; j < i; j++) {
                if(array[i] == array[j]) {
                    System.out.println("Bitte int erneut eingeben...");
                    array[i] = scan.nextInt();
                    i--;
                }
            }
        }
       
        for(int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}
 

Zurück
Oben