# Zufallszahlen erzeugen die nicht gleich sind ;/



## BraucheHilfe (19. Nov 2005)

Hallo,
ich bruache fuer mein Programm am besten randomisiert.. verschiedene ganzzahlen die nicht gleich sind.
Es gibt ja die Math.random() Funktion die mir Zufallszahlen zwischen 0-1 liefert.
Möcht ich jedoch Zufallszahlen im Bereich von1-10 und dazu noch10 verschiedene(als untere grenze sozusagen) weiss ich nich wie ich das machen soll..

Vielleicht verenne ich mich da auch in etwas...


ich hab mir ne kleine Methode gemacht die schonmal die Zufallszahlen liefern soll


```
public static int getZuffalszahl( ){
        int Zufallszahl;
        Zufallszahl=(int)((Math.random())*10+1);
        return Zufallszahl;}
```



```
PStart() {                                      //Standard Konstruktor
        Knotenanzahl=10;                            //Standard Fall...Es werden 10 Knoten erzeugt
        int Sucheingabe[]=new int[Knotenanzahl];    //Array fuer Knotenwerte deklarieren
        
        
        for(int j=0;j<Knotenanzahl;j++){        
            
            
            if(j==0){
                Sucheingabe[j]=getZuffalszahl();}        //Bei der ersten Zufallszahl ist es ja offentsichtlich...es gibt sie 
                                                                            //nicht doppelt     
            else if(j>0) {

                //Hier bin ich überfragt wie die Überprüfung laufen soll....ich muss ja im grunde genommen das array 
                 //rückwärts durchlaufen und falls es sie nochmal gibt solange erzeugen bis sie einmalig ist 
                //habs erst mit while dann mit for versucht...irgendwie steh ich aufm schlauch :(
                
            }
            
            
           
        }
```


----------



## André Uhres (19. Nov 2005)

```
import java.util.*;
...
        Set numberSet = new HashSet();
        while(numberSet.size()<10){
            numberSet.add(getZuffalszahl());  //die Zahl wird nur hinzugefügt wenn sie noch nicht besteht
        }
        for (Iterator it = numberSet.iterator(); it.hasNext();) {
            Object elem = (Object) it.next();
            System.out.println(elem.toString());
        }
```
Das Set ist hier günstiger als das Array weil es nur verschiedenwertige Zahlen annimmt.


----------



## SnooP (19. Nov 2005)

ich vermute allerdings mal, dass getZufallszahl() dann ein Integer-Objekt zurückliefern muss und kein int.

Ansonsten würd ich das wohl auch so machen...


----------



## André Uhres (19. Nov 2005)

Beim 1.5 kann es auch ein int sein.


----------



## MPW (19. Nov 2005)

BraucheHilfe hat gesagt.:
			
		

> Möcht ich jedoch Zufallszahlen im Bereich von1-10 und dazu noch10 verschiedene(als untere grenze sozusagen)



Kapier' ich das? Das sind doch nur 10 Zahlen? Wenn du dann noch 10 verschiedene Willst, mach dir doch gleich ein array und mische es....


----------



## André Uhres (19. Nov 2005)

Ich vermute mal, daß "10" hier nur den Standard-Fall darstellt.
In speziellen Fällen wird die Anzahl wohl abweichen können.

:idea: Man könnte sogar "getZuffalszahl()" ganz weglassen weil HashSet schon eine zufällige
Anordnung beinhaltet:

```
...
        int knotenZahl = 10;    //Standard Fall
        Set numberSet = new HashSet();
        for (int i = 1; i <= knotenZahl; i++) 
            numberSet.add(i);
...
```


----------



## BraucheHilfe (19. Nov 2005)

Hallo.

Super das hat jetzt ganz gut funktioniert nur bringt mir der compiler immer ne Fehlermeldung(läuft aber trotzdem)

Note: C:\Java\coding\JavaApplication1\src\javaapplication1\PStart.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Versteh ich nich ganz.

Kann ich das elem Objekt auch noch als Int ausgeben..wie schon oben geschrieben das wäre mir am liebsten
int x;
x=Integer.parseInt(elem);
frisst er nich 



Das ganze soll variable sein. Im Grunde genommen bruache ich natürlich nicht nur 10 Zufallszahlen von 1-10 sondern das war sozusagen mein Testfall


Vielen Dank für eure hilfe


----------



## André Uhres (19. Nov 2005)

Wegen der Fehlermeldung brauchst du dir keine Sorgen zu machen.
Das ist eigentlich nur eine Bermerkung, kommt bei mir auch laufend vor.

```
int x = Integer.parseInt(elem.toString());
```
Oder so:
	
	
	
	





```
Integer elem = (Integer) it.next();
            int x = elem.intValue();
```


----------



## Bleiglanz (20. Nov 2005)

Andre_Uhres hat gesagt.:
			
		

> Wegen der Fehlermeldung brauchst du dir keine Sorgen zu machen.
> Das ist eigentlich nur eine Bermerkung, kommt bei mir auch laufend vor.


pff, kann man einfach abschalten in dem man

```
Set<Integer> numberSet = new HashSet<Integer>();
```
schreibt, noch dazu muss man dann beim Auslesen nicht mehr casten


----------



## André Uhres (20. Nov 2005)

:applaus:

EDIT: aber casten muss ich trotzdem!

```
Integer elem = (Integer) it.next();
```


----------



## André Uhres (27. Nov 2005)

Damit ich nicht zu casten brauch, muss ich den Typ <Integer> auch beim Iterator angeben:

```
for (Iterator<Integer> it = numberSet.iterator(); it.hasNext();) {
            Integer elem = it.next();
            ...
```
...oder "for each" benutzen:

```
for(Integer elem : numberSet){
           ...
```


----------

