Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Verschiedene Zufallszahlen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.03.2006, 20:46 Uhr
icestorm



Hi!

Ich lerne in der Schule Java und wir sind gerade bei Arrays (das ganze Java zieht sich in der Schule etwas hin^^).

Jetzt habe ich so eine Art Zahlenraten Spiel zu programmieren, das ganze hab ich auch schon gemacht, nur will ich es eben ein wenig erweitern und zwar, dass eine Zufallszahl nicht zweimal vorkommt.

Ich hab das zirka so probiert:


Code:

    public static int zufall() {
        int zufallszahl = (int) (Math.random() * 100 + 1); // Zufallszahl wird ermittelt
        return zufallszahl; // Zufallszahl wird zukueckgegeben
    }
    
    
    public static void main(String[] args) {
        int []zahlen = new int[10]; // Array
        
        do {
            for (int i = 0; i < zahlen.length; i++) {
                zahlen[i] = zufall(); // Arrays einen Wert zuweisen
            }
            
            for (int i = 0; i < zahlen.length; i++) {
                for (int j = 0; j < zahlen.length; j++) {
                    if (zahlen[j] == zahlen[i]) {
                        do {
                            zahlen[j] = zufall();
                        } while (zahlen[j] != zahlen[i]);
                    }
                }
            }



Das wichtige dabei ist


Code:

            for (int i = 0; i < zahlen.length; i++) {
                for (int j = 0; j < zahlen.length; j++) {
                    if (zahlen[j] == zahlen[i]) {
                        do {
                            zahlen[j] = zufall();
                        } while (zahlen[j] != zahlen[i]);
                    }
                }
            }



Allerdings funktioniert das ganze nicht so wie ich es will, ist auch irgendwie klar, da z.B.: zahlen[1] gleich zahlen[1] ist.

Mir fällt irgendwie nichts besseres ein!

Hoffe jemand kann mir helfen.

Dann hätte ich noch eine Frage: Kann man in Java eigentlich .exe Dateien erstellen? Sollte schon möglich sein, oder?

Danke!
icestorm
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.03.2006, 13:16 Uhr
KaraHead



Ich würde mir eine Methode schreiben, die immer Überprüft ob es die Zahl schon im Array gibt.


C++:
public static boolean contains(int[] zahlen, int val)
    {
        for(int i : zahlen)
            if(i == val)
                return true;
        return false;
    }



Und das hinzufügen in das array ist dann nur noch Tipparbeit

C++:
public static void main(String args[])
    {
        int zahlen[] = new int[10];
        
        for(int i=0; i<zahlen.length; i++)
        {
            int zahl;
            do{
                zahl = zufall();
            }while(contains(zahlen,zahl));
            
            zahlen[i] = zahl;
        }
    }




Zitat:

Dann hätte ich noch eine Frage: Kann man in Java eigentlich .exe Dateien erstellen? Sollte schon möglich sein, oder?



Es gibt zwar native Compiler, die Bytecode in Maschinencode umwandeln, was aber die plattformunabhängigkeit von deinem Programm zerstört.

Ich würde dir zu einem EXEWrapper raten, wie z.B. JSmooth. Solche Programme erstellen EXEs, die dein Java Programm dann starten.
Eine JRE ist dennoch erforderlich.

Dieser Post wurde am 26.03.2006 um 13:20 Uhr von KaraHead editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.03.2006, 14:01 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


gibt es in Java kein randomshuffle?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.03.2006, 15:55 Uhr
KaraHead



Eigentlich schon.

Zitat von Klasse Collections aus der API:

public static void shuffle(List<?> list, Random rnd)
Randomly permute the specified list using the specified source of randomness. All permutations occur with equal likelihood assuming that the source of randomness is fair.

This implementation traverses the list backwards, from the last element up to the second, repeatedly swapping a randomly selected element into the "current position". Elements are randomly selected from the portion of the list that runs from the first element to the current position, inclusive.

This method runs in linear time. If the specified list does not implement the RandomAccess interface and is large, this implementation dumps the specified list into an array before shuffling it, and dumps the shuffled array back into the list. This avoids the quadratic behavior that would result from shuffling a "sequential access" list in place.

Parameters:
list - the list to be shuffled.
rnd - the source of randomness to use to shuffle the list.
Throws:
UnsupportedOperationException - if the specified list or its list-iterator does not support the set operation.



Aber ich schätze, dass icestorm in der Schule keine API Klassen benutzen darf bzw. sie in der Schule noch nicht so weit sind.

Dieser Post wurde am 26.03.2006 um 15:56 Uhr von KaraHead editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.03.2006, 19:42 Uhr
icestorm



Danke für die Hilfe, habe es dann am Sonntag nochmal probiert und wie folgt gelöst:


Code:

for (int i = 0; i < zahlen.length; i++) {
                zahlen[i] = zufall(); // Arrays einen Wert zuweisen
                for (int j = 0; j < i; j++) {
                    if (zahlen[j] == zahlen[i]) { // Wenn zwei Zahlen gleich sind, dann wird dem Array ein neuer Wert zugewiesen.
                        while (zahlen[j] != zahlen[i]) {
                            zahlen[j] = zufall();
                        }
                    }
                }
            }



Ist die For-Schleife mit dem : (Doppelpunkt) dasselbe, wie in PHP die foreach Schleife? Haben wir auch noch nicht gemacht. contains() auch noch nicht.
Ich muss mich eh mal an Java ranmachen, wollte ich eh schon "lange", in der Schule ist mir das irgendwie zu langsam .

Danke nochmal

icestorm
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.03.2006, 19:51 Uhr
KaraHead




Zitat:

Ist die For-Schleife mit dem : (Doppelpunkt) dasselbe, wie in PHP die foreach Schleife?



Jupp, die Schleife gibt es erst ab Java 1.5 und wird intern vom Compiler zu einer normalen for-schleife umgewandelt. Ersparrt einem also nur ein bischen Schreibarbeit.

Die Methode contains() stammt von mir und ist somit auch nix besonderes.


Ansonsten viel Glück und frohes schaffen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: