C# .NET hjälp med mitt första program.

Permalänk

C# .NET hjälp med mitt första program.

Jag har programmerat lite i java tidigare och tänkte nu prova C# .NET.
Jag har försökt att göra ett enkelt program som ska simulera flera lottodragningar där man väljer 7 nummer och loopar X antal gånger och kollar mot en slumpad dragning för att se hur många rätt man fått. Om jag knappar in 10000 dragningar så förväntar jag mig att jag ska ha en mängd 5 rätt, några 6 rätt och kanske en 7 rätt.

Men inget händer när jag startar dragningen genom att klicka på btn_start.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { List<int> lottoNumbers; List<int> randomList; int antalRätt = 0; public Form1() { InitializeComponent(); txt_5rätt.Text = 0.ToString(); txt_6rätt.Text = 0.ToString(); txt_7rätt.Text = 0.ToString(); } private void btn_start_Click(object sender, EventArgs e) { int nr1 = int.Parse(txt_LottoNr1.Text); int nr2 = int.Parse(txt_LottoNr2.Text); int nr3 = int.Parse(txt_LottoNr3.Text); int nr4 = int.Parse(txt_LottoNr4.Text); int nr5 = int.Parse(txt_LottoNr5.Text); int nr6 = int.Parse(txt_LottoNr6.Text); int nr7 = int.Parse(txt_LottoNr7.Text); int[] selectedNumbers = {nr1,nr2,nr3,nr4,nr5,nr6,nr7 }; int antalDragningar = int.Parse(txt_antalDragningar.Text); for (int i = 1; i <= antalDragningar; i++) { foreach (int number in drawNumbers()) { if (selectedNumbers.Contains(number)) { antalRätt++; } } if (antalRätt == 7) { int n = int.Parse(txt_7rätt.Text); n++; txt_7rätt.Text = n.ToString(); } if (antalRätt == 6) { int n = int.Parse(txt_6rätt.Text); n++; txt_6rätt.Text = n.ToString(); } if (antalRätt == 5) { int n = int.Parse(txt_5rätt.Text); n++; txt_5rätt.Text = n.ToString(); } antalRätt = 0; } } private List<int> drawNumbers() { lottoNumbers = Enumerable.Range(1, 35).ToList(); randomList = new List<int>(); Random random = new Random(); for (int i = 0; i < 7; i++) { int randomNumber = random.Next(0, lottoNumbers.Count); randomList.Add(lottoNumbers[randomNumber]); lottoNumbers.RemoveAt(randomNumber); } return randomList; } } }

Permalänk
Medlem

Har du bundit eventet?

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

Det här verkar vara ett utmärkt tillfälle för dig att lära dig hur C#-debuggern fungerar. Sätt en brytpunkt i början av btn_start_Click och kör programmet, så ser du om metoden ens anropas. Gör den det så är det bara att stega vidare och se vad som händer.

Ett tips är förresten att inte skapa en ny Random-instans i varje anrop till drawNumbers. Det är ett väldigt vanligt nybörjarfel, men eftersom Random() använder systemklockan som seed så kommer du få samma serie med nummer om du anropar drawNumbers flera gånger på samma millisekund (eller vilken upplösning klockan nu har). Det är bättre att bara ha en Random-instans och skicka in den till drawNumbers istället.

Permalänk
Medlem

Detta är bra exempel på att man inte skall spela på Lotto. För många år sedan var vi ett lag som satsade på olika spel (stryktips, lotto, måltips). Vi hade tillgång till en stordator(!) under helgerna, där vi testade miljontals varianter beroende på statistik (lottokulorna kunde ju bli olika laddade etc). Vi hade väldigt mycket statistik på fotboll. Vi simulerade Lotto-dragningar. Det blev aldrig vinst. Bara att inse. Minst dåligt var stryktipset. Enligt en expert är det möjligt att vinna på hästar om man är extremt insatt. Mina spelförsök har kostat mig över 30 000 kr. Det var ganska liten förlust jämfört med andra.

Permalänk
Skrivet av burton666:

Jag har programmerat lite i java tidigare och tänkte nu prova C# .NET.
Jag har försökt att göra ett enkelt program som ska simulera flera lottodragningar där man väljer 7 nummer och loopar X antal gånger och kollar mot en slumpad dragning för att se hur många rätt man fått. Om jag knappar in 10000 dragningar så förväntar jag mig att jag ska ha en mängd 5 rätt, några 6 rätt och kanske en 7 rätt.

Men inget händer när jag startar dragningen genom att klicka på btn_start.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { List<int> lottoNumbers; List<int> randomList; int antalRätt = 0; public Form1() { InitializeComponent(); txt_5rätt.Text = 0.ToString(); txt_6rätt.Text = 0.ToString(); txt_7rätt.Text = 0.ToString(); } private void btn_start_Click(object sender, EventArgs e) { int nr1 = int.Parse(txt_LottoNr1.Text); int nr2 = int.Parse(txt_LottoNr2.Text); int nr3 = int.Parse(txt_LottoNr3.Text); int nr4 = int.Parse(txt_LottoNr4.Text); int nr5 = int.Parse(txt_LottoNr5.Text); int nr6 = int.Parse(txt_LottoNr6.Text); int nr7 = int.Parse(txt_LottoNr7.Text); int[] selectedNumbers = {nr1,nr2,nr3,nr4,nr5,nr6,nr7 }; int antalDragningar = int.Parse(txt_antalDragningar.Text); for (int i = 1; i <= antalDragningar; i++) { foreach (int number in drawNumbers()) { if (selectedNumbers.Contains(number)) { antalRätt++; } } if (antalRätt == 7) { int n = int.Parse(txt_7rätt.Text); n++; txt_7rätt.Text = n.ToString(); } if (antalRätt == 6) { int n = int.Parse(txt_6rätt.Text); n++; txt_6rätt.Text = n.ToString(); } if (antalRätt == 5) { int n = int.Parse(txt_5rätt.Text); n++; txt_5rätt.Text = n.ToString(); } antalRätt = 0; } } private List<int> drawNumbers() { lottoNumbers = Enumerable.Range(1, 35).ToList(); randomList = new List<int>(); Random random = new Random(); for (int i = 0; i < 7; i++) { int randomNumber = random.Next(0, lottoNumbers.Count); randomList.Add(lottoNumbers[randomNumber]); lottoNumbers.RemoveAt(randomNumber); } return randomList; } } }

Har du löst den? Skulle vara tacksam om du delar den

Permalänk
Medlem
Skrivet av Eriksson85:

Har du löst den? Skulle vara tacksam om du delar den

Om du berättar vad du sitter fast med så kan vi hjälpa dig att hitta en lösning.

Visa signatur

| MSI B650 Tomahawk | Ryzen 7 9800X3D | ASUS RTX 3070 | 64GB DDR5 6000MHz | MSI MPG A1000G | Samsung 970 Evo M.2 1TB + 2x WD Black SN850X 2TB|

Permalänk

Jag har samma problem, Det händer inget med btn_start_Click. Trots jag har lagt events Click:(

Skrivet av BrutalSwede:

Om du berättar vad du sitter fast med så kan vi hjälpa dig att hitta en lösning.

Permalänk
Hedersmedlem
Skrivet av Eriksson85:

Jag har samma problem, Det händer inget med btn_start_Click. Trots jag har lagt events Click:(

Har du kollat med debuggern om din kod i click-metoden faktiskt körs, eller du ser ingen output?
Om du inte har kollat med debuggern så gör det. Sedan kan du också passa på att stega igenom din kod för att se vad den gör.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk

Jag gick igenom koden flera gånger, jag ser ingen output:(

Skrivet av giplet:

Har du kollat med debuggern om din kod i click-metoden faktiskt körs, eller du ser ingen output?
Om du inte har kollat med debuggern så gör det. Sedan kan du också passa på att stega igenom din kod för att se vad den gör.

Permalänk
Vila i frid

Uhm, originalkoden saknar ju hopers deklarationer och vägrar därför att kompilera och då händer absolut noll och inget.

Permalänk
Hedersmedlem
Skrivet av Eriksson85:

Jag gick igenom koden flera gånger, jag ser ingen output:(

Om du inte har kollat med debuggern så gör det. Sedan kan du också passa på att stega igenom din kod för att se vad den gör.

Lär dig debuggern och de andra verktygen!

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av hasenfrasen:

Uhm, originalkoden saknar ju hopers deklarationer och vägrar därför att kompilera och då händer absolut noll och inget.

Det är en del av klassen som du ser (notera partial class) Resten deklareras i designer-filen och är då endast de element som skapats ute i själva formen. Det är alltså Windows Forms och inte ett konsoll-program som skapats.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz

Permalänk
Medlem
Skrivet av Eriksson85:

Jag gick igenom koden flera gånger, jag ser ingen output:(

Har du testat att sätta en breakpoint i början av click-metoden för att se ifall den körs överhuvudtaget?

Visa signatur

| MSI B650 Tomahawk | Ryzen 7 9800X3D | ASUS RTX 3070 | 64GB DDR5 6000MHz | MSI MPG A1000G | Samsung 970 Evo M.2 1TB + 2x WD Black SN850X 2TB|

Permalänk
Vila i frid
Skrivet av Pamudas:

Resten deklareras i designer-filen

...som inte postades av trådskaparen. Den nybörjare som nu försöker göra något vettigt av originalkoden kommer att få fundera ett BRA tag på hur den designen skulle kunna se ut.

Permalänk
Medlem
Skrivet av hasenfrasen:

...som inte postades av trådskaparen. Den nybörjare som nu försöker göra något vettigt av originalkoden kommer att få fundera ett BRA tag på hur den designen skulle kunna se ut.

Vad spelar det för roll? Det är ju TS som vill ha hjälp med sitt problem

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz