Topher: Lottozahlen

Moin

Ich brauch hilfe!
Sinn und zweck meines Scripts ist 6 Lottozahlen zu generieren die zwischen 1 und 49 liegen keine darf sich wiederholen!

Mein Vorschlag sieht so aus leider ist er fehlerhaft! Bitte helft mir:

<HTML>
<HEAD>
<TITLE>Topher ist der grösste</TITLE>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var a;b;c;d;e;f;
function Mist()
{
a=Math.round(Math.random()*50);
a=parseFloat(a);
if(a<1||a>49)
{Mist();}
b=Math.round(Math.random()*50);
b=parseFloat(b);
if(b<1||b>49)
if(a!=b)
{Mist();}
c=Math.round(Math.random()*50);
c=parseFloat(c);
if(c<1||c>49)
if(a!=b!=c)
{Mist();}
d=Math.round(Math.random()*50);
d=parseFloat(d);
if(d<1||d>49)
if(a!=b!=c!=d)
{Mist();}
e=Math.round(Math.random()*50);
e=parseFloat(e);
if(e<1||e>49)
if(a!=b!=c!=d!=e)
{Mist();}
f=Math.round(Math.random()*50);
f=parseFloat(f);
if(f<1||f>49)
if(a!=b!=c!=d!=e!=f)
{Mist();}
document.write("Die Zahlen sind"+a+"<br>"+b+"<br>"+c+"<br>"+d+"<br>"+e+"<br>"+f+"<br>");
}
//-->
</SCRIPT>
</HEAD>
<BODY onLoad="Mist()">
</BODY>
</HTML>

Danke

  1. Hi,

    Mein Vorschlag sieht so aus leider ist er fehlerhaft!

    wie definiert sich "fehlerhaft"?

    a=Math.round(Math.random()*50);
    a=parseFloat(a);
    if(a<1||a>49)

    Aua. Welche Werte liefert Math.random(), und wie macht man daraus ganzzahlige Werte zwischen 1 einschl. und 49 einschl.?

    b=Math.round(Math.random()*50);

    Nein, oder? Du möchtest tatsächlich sechs voneinander unabhängige Variablen füllen? Den Begriff "Array" hast Du aber schon mal gehört, oder?

    document.write("Die Zahlen sind"+a+"<br>"+b+"<br>"+c+"<br>"+d+"<br>"+e+"<br>"+f+"<br>");

    Wo ist Deine Prüfung auf Wiederholung? Das Problem lässt sich zwar auch ohne eine solche Prüfung lösen, aber nicht bei Deinem Ansatz.

    <BODY onLoad="Mist()">

    onload etwas mit document.write() ausgeben zu wollen ist zu spät.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah!

      So kommt der aber auch nicht weiter. ;o)

      @Topher: Versuch mal ein Array mit 49 Zahlen zu füllen und mittels slice() und random http://de.selfhtml.org/javascript/objekte/array.htm#slice diese daraus zu extrahieren. Das ist ein Vierzeiler und funktioniert ohne Prüfung ob was doppelt ist.

      Afra

      1. Hallo Afra,

        Deine Idee ist ganz gut. Denke aber, dass er mit der splice-Methode http://de.selfhtml.org/javascript/objekte/array.htm#splice das Problem besser angehen kann.

        So ungefähr:

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

        <html>
        <head>
         <title>Untitled</title>
        <script>
        function bla (){
        var i;
        var arrzahlen = new Array(49);
        var temp = '';

        for (i=0;i<49;i++)
         arrzahlen[i]=i+1;

        for (i=1;i<7;i++)
         temp += 'Zahl: ' + i + '   Wert: ' + arrzahlen.splice(Math.round((arrzahlen.length-1)*Math.random()),1) + '<br>';

        dingens.innerHTML =temp;
        }
        </script>

        </head>

        <body onload="bla()">
        <div id="dingens"></div>

        </body>
        </html>

        1. Hi Oll Lee!

          Das finde ich jetzt aber Jocke wie Hose.

          Schönen Gruß

          --
          Heute schon gepixelt?
          http://www.pixel-plaza.de/index.php?module=profile&subName=house&itemID=154
          1. Danke Leutz habt mir echt geholfen!

            Cheetah hat mir zwar auch geholfen könnte aber an seinen umgangsformen arbeiten aber auch danke an dich.

            THX Topher

      2. Hi,

        So kommt der aber auch nicht weiter. ;o)

        wieso meinst Du das?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo Cheatah,
          Ich fand es einfach ein bisschen spitz formuliert. Wenn er wirklich ein Problem damit hat, kommt er so halt nur schwer weiter. Oder?

          Schönen Gruß

          --
          Heute schon gepixelt?
          http://www.pixel-plaza.de/index.php?module=profile&subName=house&itemID=154
  2. Hallo Topher,

    Ich brauch hilfe!
    Sinn und zweck meines Scripts ist 6 Lottozahlen zu generieren die zwischen 1 und 49 liegen keine darf sich wiederholen!

    da habe ich noch einen alten Code-Schnipsel:

    <html>
    <head>
    <script type="text/javascript">
    function Numsort(a,b)
    { return a-b; }

    function Lotto()
    {
     var a = new Array();
     var e, i;

    while(a.length < 6)
     {
      e = 1+Math.round(Math.random()*48);
      for(i=0;i<a.length;i++)
      { if(e == a[i]) break; }
      if(i == a.length) a.push(e);
     }

    a.sort(Numsort);

    document.getElementById('number').innerHTML = a.join(', ');
    }
    </script>
    </head>
    <body onload="Lotto()">
    <div id="number"></div>
    </body>
    </html>

    Gruß
    Günter

  3. Hallo Topher,

    random() liefert Fließkommazahlen zwischen 0 und 1.
    Du brauchst also erst mal eine Funktion, die Dir natürliche Zahlen aus einem Intervall zurückgibt.

    int intRandom(int a, int b) {
       int result = floor((b - a + 1) * random());
       if(result > b) {
           result = b;
       }
       return result;
    }

    Auswählen willst Du Elemente aus einer Menge, also schreibst Du diese am besten mal auf. Dafür eignet Sich ein Array:

    int[] zahlen = new int[] {1..49};

    Nun musst Du nur noch 6 Zahlen daraus auswählen:

    int[] lotto() {
        int[] zahlen = new int[] {1..49};
        int[] result = new int[6];
        for(int i in 0..5) {
            int pos = intRandom(zahlen.first, zahlen.last);
            result[i] = zahlen[pos];
            zahlen.remove(pos);
        }
        return result;
    }

    Das ist blos Pseudocode, aber die Idee sollte klar werden.

    Grüße

    Daniel