webForumDet fria alternativet

Problem med slumpa fram olika tal(frågor)

.NET

5 svar · 552 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag har en frågelek som bygger på att slumpa fram 10 olika frågor ur en
access databas. Den fungerade perfekt i klassisk ASP men nu har jag problem
med att slumpa nya frågor dvs första gången så går det bra, men vill man
spela igen så blir det samma frågor.
Så här ser i stort sett hela klassen ut

oid loadWizar()
    {
        string sql = "SELECT MAX(id) AS maxid FROM Quize";
        OleDbCommand myCommand = new OleDbCommand(sql, DBConn);

        int max = 0;
        using (DBConn)
        {
            DBConn.Open();
            max = (int)myCommand.ExecuteScalar();
        }

        if (max == 0)
            try { }
            catch
            {
                throw;
            }

        List<int> col = new List<int>();
        Random rnd = new Random();
        for (int i = 0; i < 10; i++)
        {
            int x;
            do
            {
                x = rnd.Next(1, max);
            }
            while (col.Contains(x));
            col.Add(x);
        }
        DBConn.Close();

        sql = "SELECT Quize.Id, Quize.Fraga, Quize.Allt1, Quize.Allt2, Quize.Allt3, Quize.Svar, Quize.Ratt FROM Quize ";
        sql += "  WHERE Quize.Id  IN( ";
        int k = 1;
        foreach (int i in col)
        {
            if (k != 10)
                sql += i.ToString() + ",";
            else
                sql += i.ToString();
            k += 1;
        }
        sql += " )";
        Response.Write(sql);
        DBConn = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        DataTable dt = Webbutill.fillDataTable(DBConn, sql);

        if (dt.Rows.Count > 0)
        {
            makeQuize(Lfraga_1,RadioButtonList1,"svar1",dt,0);
            makeQuize(Lfraga_2, RadioButtonList2, "svar2", dt, 1);
            makeQuize(Lfraga_3, RadioButtonList3, "svar3", dt, 2);
            makeQuize(Lfraga_4, RadioButtonList4, "svar4", dt, 3);
            makeQuize(Lfraga_5, RadioButtonList5, "svar5", dt, 4);
            makeQuize(Lfraga_6, RadioButtonList6, "svar6", dt, 5);
            makeQuize(Lfraga_7, RadioButtonList7, "svar7", dt, 6);
            makeQuize(Lfraga_8, RadioButtonList8, "svar8", dt, 7);
            makeQuize(Lfraga_9, RadioButtonList9, "svar9", dt, 8);
            makeQuize(Lfraga_10, RadioButtonList10, "svar10", dt, 9);
        }

.. någon som kan räkna ut varför jag får problem?

Medlem sedan maj 20012 812 inlägg
#2

Problemet är Random() som inte är slumpmässig i det avseende som du tror, det är faktiskt i en speciell följd och det är så för att man skall kunna debuga sin kod och göra felsökningar.

För att få det någolunda slumpmässigt så måste du änvända dig av ett för (seed) när du skapar din Random-klass och millisekunder är ett bra värde för det.

Random rand = new Random(DateTime.Now.Millisekund);

Eller något sådant. Det kommer ju aldrig bli helt slumpmässigt eftersom om du efterfrågar på exakt samma millisekund så kommer samma ordningsföljd upp. Men bättre än så kan du inte få det :)

- M

Medlem sedan juni 20008 205 inlägg
#3

Gladh skrev:

För att få det någolunda slumpmässigt så måste du änvända dig av ett för (seed) när du skapar din Random-klass och millisekunder är ett bra värde för det.

Defaultkonstruktorn för random använder ett tidsbaserat frö, så det kommer inte hjälpa här.

Medlem sedan mars 20011 880 inlägg
#4

Problemet är tydligen någonting annat dumt som jag har gjort, jag gjorde en testsida
med koden ovan och då fungerade random perfekt(kollade sql). Kan det vara någon
catch som ligger och gör dumheter?

Medlem sedan mars 20011 880 inlägg
#5

De första 10 nummerna går bra, men hur jag än gör så kan jag inte få den att slumpa
fram 10 nya nummer. Någon som har ett bra tips?

Medlem sedan mars 20011 880 inlägg
#6

Jag har nu "lyckats" på ett sätt som jag inte tycker om. x(
Jag fick först ta bort Ajax asp:UpdatePanel, sedan fick jag lägga till en ny
knapp som slumpade nya frågor och som disablades när man börjar
frågesporten.

Det fungerar men inte snyggt... :q

252 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)