Permalänk
Medlem

Hur kommer jag vidare?(C#)

Hej,

Håller på med den här uppgiften just nu: http://i.imgur.com/3199Sgs.png och har denna kod hittils: http://pastebin.com/Q3rEReYq

Men har fastnat i foreach satsen, vet inte vad jag skall skriva i den. Har aldrig använt en foreach tidigare, kan nämnas.

Hoppas någon kan hjälpa mig att komma vidare med detta program.

Mvh
Zajtarn

Permalänk
Hedersmedlem

Hur vet du att du behöver en foreach-sats om du inte vet vad som ska stå i den? Alltså jag undrar, vad är det du vill göra med satsen?

Om du vill veta hur den används
http://msdn.microsoft.com/en-us/library/ttw7t8t6(v=vs.80).asp...

Permalänk
Medlem
Skrivet av Shimonu:

Hur vet du att du behöver en foreach-sats om du inte vet vad som ska stå i den? Alltså jag undrar, vad är det du vill göra med satsen?

Om du vill veta hur den används
http://msdn.microsoft.com/en-us/library/ttw7t8t6(v=vs.80).asp...

En kompis sade att jag ska använda foreach-sats, därför har jag börjat skriva det i koden. Tack för länken.

Vad ska jag slänga in i koden efter foreach-satsen?

Permalänk
Medlem

Antar att det är något i stil med detta som efterfrågas:

utfall.Add(tal1); // lägg till respektive tal i listan utfall.Add(tal2); //osv int one = 0, two = 0, three = 0, four = 0, five = 0, six = 0; foreach(int number in utfall) { if (number == 1) one++; if (number == 2) two++; } utfall1.Text = Convert.ToString(one); // printar ut antal ettor utfall2.Text = Convert.ToString(two); // printar ut antal tvåor

Permalänk
Medlem
Skrivet av Flostyle:

Antar att det är något i stil med detta som efterfrågas:

utfall.Add(tal1); // lägg till respektive tal i listan utfall.Add(tal2); //osv int one = 0, two = 0, three = 0, four = 0, five = 0, six = 0; foreach(int number in utfall) { if (number == 1) one++; if (number == 2) two++; } utfall1.Text = Convert.ToString(one); // printar ut antal ettor utfall2.Text = Convert.ToString(two); // printar ut antal tvåor

Tack så mycket, nu fungerar det Så varje if-sats i eachfor-satsen plussar ihop hur många varje? Isåfall slänger jag in en kommentar att if-satserna i eachfor-satsen sorterar utfallen.

Permalänk
Medlem

Innan foreach-satsen så finns det sex int variabler som ju alla är noll och sedan används för att hålla koll på hur många ettor o.s.v. som det finns. Vad som händer i foreach-satsen är att vi går igenom alla poster i listan utfall och för varje siffra som råkar vara en etta så plussar vi på variabeln one med ett genom att skriva ++ efter och så håller vi på så tills vi gått igenom hela listan.

Permalänk
Medlem
Skrivet av Flostyle:

Innan foreach-satsen så finns det sex int variabler som ju alla är noll och sedan används för att hålla koll på hur många ettor o.s.v. som det finns. Vad som händer i foreach-satsen är att vi går igenom alla poster i listan utfall och för varje siffra som råkar vara en etta så plussar vi på variabeln one med ett genom att skriva ++ efter och så håller vi på så tills vi gått igenom hela listan.

Alright, förstår nu. Och genom dessa: int tal1 = slumptal.Next(1, 7); resultat1.Text = Convert.ToString(tal1); - så skriver vi ut slumptalen i varje textbox?

Permalänk
Medlem

Satsen

int tal1 = slumptal.Next(1, 7);

genererar ett slumptal som är minst ett och mindre än sju.

Satsen

resultat1.Text = Convert.ToString(tal1);

är den som sköter själva utskriften. Eftersom resultat.Text är av typen string så måste Convert.ToString stå med för att konvertera tal1 så att den också blir en string.

Permalänk
Medlem

En int kan man köra ToString() på direkt tror jag? - Behöver alltså inte köra en Convert.ToString(int) eftersom en int aldrig kan vara null.

Tycker det är lättare att läsa:

resultat1.Text = tal1.ToString();
än
resultat1.Text = Convert.ToString(tal1);

Permalänk
Medlem

Som du beskriver koden enligt din publicerade källkod så verkar det ju som om du kan få fram samma värde flera gånger, är det meningen? För såvitt jag förstått det så har en traditionell tärning värde 1-6. Om du ska slumpa värden måste den ju kontrollera att ett värde inte redan existerar.

< än som @Flostyle går in på blir alltså aldrig exakt val av, alltså inte 6.
1, 7 blir lägst 1 och högst 7.

Dessutom vore väl en foreach loop för att slumpa objekt, en loop för att skriva ut dem bättre än den syntax du beskriver.

exempel (pseudo):

för varje objekt, skapa tärning och slumpa ett värde, kolla om andra tärningar har samma värde, om inte lägg till

för varje objekt i tärningslista, skriv ut till kontrollerna.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Medlem

utfall.Add(tal1); // lägg till respektive tal i listan utfall.Add(tal2); //osv int one = 0, two = 0, three = 0, four = 0, five = 0, six = 0; int[] hits= new int[utfall.Length()]; foreach(int number in utfall) { for(int i=1; i<=utfall.Length(); i++){ if(number==i) hits[i-1]++; } } utfall1.Text = hits[0].ToString(); // printar ut antal ettor utfall2.Text = hits[1].ToString(); // printar ut antal tvåor

Detta borde funka också, och blir kortare kod. Är dock inte helt hundra på att utfall.Length() men något åt det hållet skall finnas, du ska alltså ha antal element i listan.

Visa signatur

FreeNAS 3U | 8GB | 2x2x3TB ProxMox i7-8700K | 32GB Desktop Dell 22" | Benq 22" | i5-smth | 16GB | Intel 520 120GB | 500GB | Arch

Permalänk
Medlem

Jätteslarvigt objektorienterat exempel gjort med lite inspiration från @zAjtarN och @atriix:

Håll Form1 så ren som möjligt.

Exempel där blockering av samma siffra inte är blockerat

using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { SweClockersExample_Dices.Randomize.SetContent(panel1); } private void RandomVal(object sender, EventArgs e) { MessageBox.Show(SweClockersExample_Dices.Stats.Statistics(panel1)); } } } namespace SweClockersExample_Dices { public class Stats { static int one = 0, two = 0, three = 0, four = 0, five = 0, six = 0, control = 0; private static List<int> number = new List<int>(); public static string Statistics(Panel panel) { for (int i = 0; i < panel.Controls.Count; i++) { if (panel.Controls[i] is TextBox) { number.Add(Convert.ToInt16(panel.Controls[i].Text)); } } foreach (int num in number) { switch (num) { case 1: one++; break; case 2: two++; break; case 3: three++; break; case 4: four++; break; case 5: five++; break; case 6: six++; break; default: MessageBox.Show("Felaktigt värde inlagt"); break; } } return string.Format("Ettor: {0}; Tvåor: {1}\nTreor: {2} Fyror: {3}\nFemmor: {4} Sexor: {5}", one, two, three, four, five, six); } } public static class Randomize { static Random Random = new Random(); public static void SetContent(Panel panel) { for (int i = 0; i < panel.Controls.Count; i++) { if (panel.Controls[i] is TextBox) { ((TextBox)panel.Controls[i]).Clear(); ((TextBox)panel.Controls[i]).Text = Random.Next(1, 7).ToString(); } } } } }

Dold text

Exempel där förekomsten av samma siffra är blockerat

using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void RandomVal(object sender, EventArgs e) { MessageBox.Show(SweClockersExample_Dices.Stats.Statistics(panel1)); } private void button2_Click(object sender, EventArgs e) { SweClockersExample_Dices.Randomize.SetContent(panel1); } } } namespace SweClockersExample_Dices { public class Stats { static int one = 0, two = 0, three = 0, four = 0, five = 0, six = 0, control = 0; private static List<int> number = new List<int>(); private bool Contains = false; public static string Statistics(Panel panel) { for (int i = 0; i < panel.Controls.Count; i++) { if (panel.Controls[i] is TextBox) { number.Add(Convert.ToInt16(panel.Controls[i].Text)); } } foreach (int num in number) { switch (num) { case 1: one++; break; case 2: two++; break; case 3: three++; break; case 4: four++; break; case 5: five++; break; case 6: six++; break; default: MessageBox.Show("Felaktigt värde inlagt"); break; } } return string.Format("Ettor: {0}; Tvåor: {1}\nTreor: {2} Fyror: {3}\nFemmor: {4} Sexor: {5}", one, two, three, four, five, six); } } public static class Randomize { static Random Random = new Random(); static List<int> Numbers = new List<int>(); public static void SetContent(Panel panel) { Clear(panel); int tempRandom = Random.Next(1, 7); SetStartContent(); do { for (int ii = 0; ii < Numbers.Count; ii++) { switch (Numbers.Contains(tempRandom)) { case true: tempRandom = Random.Next(1, 7); break; case false: if (Numbers.Count < 6) { Numbers.Add(tempRandom); } break; default: tempRandom = Random.Next(1, 7); break; } } } while (Numbers.Count < 6); PrintNumbers(panel); } private static void PrintNumbers(Panel panel) { for (int iii = 0; iii < panel.Controls.Count; iii++) { if (panel.Controls[iii] is TextBox) { ((TextBox)panel.Controls[iii]).Text = Numbers[iii].ToString(); } } } private static void ShowCount() { MessageBox.Show(Numbers.Count.ToString()); } private static void SetStartContent() { if (Numbers.Count < 1) { Numbers.Add(Random.Next(1, 7)); } } private static void Clear(Panel panel) { Numbers.Clear(); for (int io = 0; io < panel.Controls.Count; io++) { ((TextBox)panel.Controls[io]).Text = ""; } } } }

Dold text
Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40