Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Problem med att convertera array till asp.net(C#)

Postades av 2006-09-09 10:14:45 - Benni Svensson, i forum asp.net generellt, Tråden har 8 Kommentarer och lästs av 505 personer

Jag har ett väl fungerande vb-script, som jag skulle behöva ha hjälp med att översätta:
<code>
Randomize
Dim Urval(10)
' Antal hittills utvalda
Antal_valda = 0
' Håll på tills vi valt 10 stycken
While Antal_valda < 10
' Välj ett tal
' Slumptal = Int(Rnd * 100) + 1
Slumptal = Int(Rnd * rst("maxid")) + 1

' Finns talet redan?
Finns_redan = false
For i = 1 to Antal_valda
If Slumptal = Urval(i) Then
' Talet fanns redan
Finns_redan = true
Exit For
End If
Next
' Om talet inte fanns, lägg det i Urval'
If Not Finns_redan Then
Antal_valda = Antal_valda + 1
Urval(Antal_valda) = Slumptal
End If
Wend
Session("Urval") = Urval(10)
</code>
När det gäller att få fram ETT slumptal så har jag löst det så här:
<code>
sql = "SELECT MAX(id) AS maxid FROM Quize";
DataSet ds1 = new DataSet();
OleDbDataAdapter Adapter1 = new OleDbDataAdapter();
Adapter1.SelectCommand = new OleDbCommand(sql, DBConn);
Adapter1.Fill(ds1, "Quize");

string id = ds1.Tables["Quize"].Rows[0]["maxid"].ToString();

Random randomNumber = new Random();
slumpTal = randomNumber.Next(1, Convert.ToInt32(id));
</code>
Men hur jag sen än gör, så kommer jag galet.

[REDIGERAT]
Nu försöker jag så här:
<code>
int[] Urval = new int [10];
int antalValda=0;
int slumpTal=0;
while (antalValda < 10)
{
Random randomNumber = new Random();
slumpTal = randomNumber.Next(1, Convert.ToInt32(id));
for (int i = 0; i < antalValda; i++)
{
if (slumpTal != Urval[i])
{
antalValda = antalValda + 1;
Urval[antalValda] = slumpTal;
}
}
</code>
Nu får jag inga fel, men sidan laddas inte upp, den "tänker" hela tiden.


Svara

Sv: Problem med att convertera array till asp.net(C#)

Postades av 2006-09-09 16:41:32 - Niklas Jansson

Har du färre än 10 stycken så är det klart att det aldrig funkar.

Det rimliga att göra är att ha någon slags lista, fylla den med alla möjliga nummer och sen dra 10 ur den listan.


Svara

Sv:Problem med att convertera array till asp.net(C#)

Postades av 2006-09-09 17:12:12 - Benni Svensson

Niklas.
Skulle du tänka dig att förklara lite närmare?


Svara

Sv: Problem med att convertera array till asp.net(C#)

Postades av 2006-09-09 17:50:49 - Niklas Jansson

Kan inte .NET tillräckligt väl för att kunna alla begreppen. I princip är det någon som heter "list" som du ska använda.

Eller så kan du göra två vektorer, en med bool för "är redan vald", och sen gå igenom den. Den metoden du använder är felbenägen och det är nog därför det går som det går.

Är trött som fan, men i korthet menar jag med listan följande:
Du börjar med en lista [1, 2, 3, 4, 5, ... 20]

Sen väljer du ett element slumpvis, säg 7, du får då listan [1, 2, 3, ... 6, 8, 9, ... 20]
Sen fortsätter du så tills du har tömt listan.


Svara

Sv:Problem med att convertera array till asp.net(C#)

Postades av 2006-09-10 12:25:27 - Benni Svensson

Jag har lyckats få ihop det så här:
<code>
string sql = "SELECT MAX(id) AS maxid FROM Quize";
string conn = Webbutill.dataConn(Request.ServerVariables["SERVER_NAME"]);
DBConn = new OleDbConnection(ConfigurationManager.ConnectionStrings[conn].ConnectionString);
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);
}
foreach (int i in col)
Response.Write(i.ToString() + "<br/>");
</code>
Detta fungerar kanonbra.


Svara

Sv: Problem med att convertera array till asp.net(C#)

Postades av 2006-09-10 14:37:53 - Niklas Jansson

Hehe... det blev nästan som jag sa... =)
Men bakvänt.

Så som du gör nu kan du använda vad som helst istället för list där du har "contains".

Problemet med koden är om du tar bort en post. Då kommer ett av id-numren inte funka.

I princip så menar jag att du ska göra något i stil med (pseudokod):

<code>
list idnummer = db.get("SELECT ID FROM Quize")
vector desomsparas;
for(i = 0; i<10; i++){
index = random();
desomsparas[i] = idnummer[index];
idnummer.remove[index];
}
print(desomsparas);
</code>

Du slipper alltså leta bland det du har, och det går därför fortare.
Den andra varianter är något i stil med:

<code>
vector<int> idnummer = db.get(samma som ovan);
vector<bool> choosen = lika lång som idnummer, fylld med false;
vector<int> valda;
int count=0;

while(count<10){
index = random;
if(choosen[index]==false){
choosen[index] = true;
count++;
}
}

for(i = 0; i< choosen.length(); i++)
if(choosen[i])
print(idnummer);
</code>

eller så kör du print i loopen, eller så lägger du över dem i en separat:

<code>
while(count<10){
index = random;
if(choosen[index]==false){
choosen[index] = true;
valda[count] = index;
count++;
}
}

//och du kan nu använda "valda"
</code>

PS. Om du tänker på det engelska ordet för "frågesport", så stavas det "quiz", utan "e".


Svara

Sv:Problem med att convertera array till asp.net(C#)

Postades av 2006-09-13 20:04:35 - Benni Svensson

Hej Niklas, och tack för utförligt svar.
Jag bara funderar på det här:
<code>
db.get("SELECT ID FROM Quize")

</code>
db.get har jag inte träffat på tidigare, vad är det?


Svara

Sv: Problem med att convertera array till asp.net(C#)

Postades av 2006-09-13 21:15:01 - Oskar Johansson

> I princip så menar jag att du ska göra något i stil med (pseudokod):

Han demonstrerar bara principen, applicerbart till vilken miljö som helst


Svara

Sv: Problem med att convertera array till asp.net(C#)

Postades av 2006-09-13 23:20:50 - Andreas Hillqvist

Du kan skriva något sånt här:

           const string cs = "Provider=Microsoft.Jet.OLEDB.4.0;"+
                              "Data Source=\"H:\\Documents and Settings\\Andreas\\My Documents\\Visual Studio 2005\\Projects\\ConsoleApplication1\\ConsoleApplication1\\db.mdb\"";
            
            
            OleDbConnection con = new OleDbConnection(cs);
            using (con)
            {
                con.Open();
                DataTable dt = getRandomRows(con);

                //List column names
                foreach (DataColumn column in dt.Columns)
                {
                    System.Diagnostics.Debug.Write(column.ColumnName);
                }
                System.Diagnostics.Debug.WriteLine("");

                foreach (DataRow row in dt.Rows) 
                {
                    foreach (DataColumn column in dt.Columns)
                    {
                        System.Diagnostics.Debug.Write(row[column]);
                        
                    }
                    System.Diagnostics.Debug.WriteLine("");
                }        
            }
        

        //Retrives rows from database
        DataTable getAllRows(OleDbConnection con)
        {
            const string sql = "SELECT * FROM Quize";

            OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

        DataTable getRandomRows(OleDbConnection con)
        {
            const int max = 10;

            Random rnd = new Random();
            DataTable dt = getAllRows(con);
            DataTable result = new DataTable();
            foreach (DataColumn column in dt.Columns)
            {
                result.Columns.Add(column.ColumnName, column.DataType );
            }


            if (dt.Rows.Count > max)
            {
                for (int i = 0; i < max; i++)
                {
                    int index = rnd.Next(dt.Rows.Count);

                    DataRow row = dt.Rows[index];
                    result.Rows.Add(row.ItemArray);
                    row.Delete();
                }
                return result;
            }
            else
            {
                return dt;
            }
        }


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 600
27 953
271 705
4 124
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies