Verktyg Visningsval
2013-02-04, 17:47   #1

mhj

Medlem

Plats: Stockholm

Registrerad: mar 2011

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
mhj är inte uppkopplad
2013-02-04, 18:21   #2

Shimonu

Moderator

Shimonus avatar

Plats: Linköping

Registrerad: okt 2006

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/libr...(v=vs.80).aspx
__________________
Har du åsikter om moderering, frågor eller något annat kan du kontakta mig via shimonu@sweclockers.com
Shimonu är inte uppkopplad Folding
2013-02-04, 18:29   #3

mhj

Medlem

Plats: Stockholm

Registrerad: mar 2011

Citat:
Ursprungligen inskrivet av Shimonu Visa inlägg
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/libr...(v=vs.80).aspx
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?
mhj är inte uppkopplad
2013-02-04, 18:30   #4

Flostyle

Medlem

Registrerad: sep 2010

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
Flostyle är inte uppkopplad
2013-02-04, 18:41   #5

mhj

Medlem

Plats: Stockholm

Registrerad: mar 2011

Citat:
Ursprungligen inskrivet av Flostyle Visa inlägg
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.
mhj är inte uppkopplad
2013-02-04, 18:55   #6

Flostyle

Medlem

Registrerad: sep 2010

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.
Flostyle är inte uppkopplad
2013-02-04, 19:13   #7

mhj

Medlem

Plats: Stockholm

Registrerad: mar 2011

Citat:
Ursprungligen inskrivet av Flostyle Visa inlägg
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?
mhj är inte uppkopplad
2013-02-04, 19:53   #8

Flostyle

Medlem

Registrerad: sep 2010

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.
Flostyle är inte uppkopplad
2013-02-05, 08:56   #9

Ernesto

Medlem

Plats: Stockholm

Registrerad: aug 2005

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);
__________________
Intel 2500K @ 4.6Ghz | Asus Matrix 7970 Crossfire | Asus P8P67-Pro | Antec P183 |
Eyefinity 3x Dell u2312hm | Corsair HX 750w | 2x Intel 320 240GB SSD | 3 x Mekanisk HDD
Ernesto är inte uppkopplad
2013-02-05, 09:14   #10

freddyfresh

Medlem

freddyfreshs avatar

Plats: 127.0.0.1

Registrerad: apr 2010

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.
__________________
Pain is temporary, quiting lasts forever.
Telefon: N7100 MIUI - Rom
Dator: Phenom II X4 965, 16gb RAM, GA-970A-UD3, GTX 560 Ti, Corsair SP500, Sidewinder + Microsoft comfort 6000, Steelseries v2 + usb
Citera för snabbt svar.
freddyfresh är inte uppkopplad
2013-02-05, 20:40   #11

atriix

Medlem

atriixs avatar

Plats: 127.0.0.1

Registrerad: nov 2011

            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.
__________________
FreeNAS Lenovo ThinkCenter m55 8806-CTO | 4GB | 2x2TB ESXi GA-P67A-D3-B3 | i5 2310 | HyperX 32GB 1600MHz | <TB Desktop Dell 22" | Benq 22" | Lenovo Thinkpad T430 | 16GB | Intel 520 120GB | 500GB | Debian
atriix är inte uppkopplad Folding
2013-02-07, 19:20   #12

freddyfresh

Medlem

freddyfreshs avatar

Plats: 127.0.0.1

Registrerad: apr 2010

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
Spoiler:

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 senderEventArgs e)
        {
            
SweClockersExample_Dices.Randomize.SetContent(panel1);
        }

        private 
void RandomVal(object senderEventArgs e)
        {
            
MessageBox.Show(SweClockersExample_Dices.Stats.Statistics(panel1));
        }
    }
}

namespace 
SweClockersExample_Dices
{
    public class 
Stats
    
{
        static 
int one 0two 0three 0four 0five 0six 0control 0;
        private static List<
intnumber = new List<int>();

        public static 
string Statistics(Panel panel)
        {
            for (
int i 0panel.Controls.Counti++)
            {
                if (
panel.Controls[iis 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}"onetwothreefourfivesix);
        }
    }
    public static class 
Randomize
    
{
        static 
Random Random = new Random();

        public static 
void SetContent(Panel panel)
        {
            for (
int i 0panel.Controls.Counti++)
            {
                if (
panel.Controls[iis TextBox)
                {
                    ((
TextBox)panel.Controls[i]).Clear();
                    ((
TextBox)panel.Controls[i]).Text Random.Next(17).ToString();
                }
            }
        }
    }




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

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 senderEventArgs e)
        {
        }

        private 
void RandomVal(object senderEventArgs e)
        {
            
MessageBox.Show(SweClockersExample_Dices.Stats.Statistics(panel1));
        }

        private 
void button2_Click(object senderEventArgs e)
        {
            
SweClockersExample_Dices.Randomize.SetContent(panel1);

        }
    }
}

namespace 
SweClockersExample_Dices
{
    public class 
Stats
    
{
        static 
int one 0two 0three 0four 0five 0six 0control 0;
        private static List<
intnumber = new List<int>();
        private 
bool Contains false;

        public static 
string Statistics(Panel panel)
        {
            for (
int i 0panel.Controls.Counti++)
            {
                if (
panel.Controls[iis 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}"onetwothreefourfivesix);
        }
    }

    public static class 
Randomize
    
{
        static 
Random Random = new Random();
        static List<
intNumbers = new List<int>();

        public static 
void SetContent(Panel panel)
        {
            
Clear(panel);

            
int tempRandom Random.Next(17);

            
SetStartContent();
            
            do
            {
                for (
int ii 0ii Numbers.Countii++)
                {
                    switch (
Numbers.Contains(tempRandom))
                    {
                        case 
true:
                            
tempRandom Random.Next(17);
                            break;
                        case 
false:
                            if (
Numbers.Count 6)
                            {
                                
Numbers.Add(tempRandom);
                            }
                            break;
                        default:
                            
tempRandom Random.Next(17);
                            break;
                    }
                }
            } while (
Numbers.Count 6);

            
PrintNumbers(panel);
        }

        private static 
void PrintNumbers(Panel panel)
        {
            for (
int iii 0iii panel.Controls.Countiii++)
            {
                if (
panel.Controls[iiiis 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(17));
            }
        }

        private static 
void Clear(Panel panel)
        {

            
Numbers.Clear();
            for (
int io 0io panel.Controls.Countio++)
            {
                ((
TextBox)panel.Controls[io]).Text "";
            }
        }
    }


Senast redigerad av freddyfresh 2013-02-09 klockan 13:29.
freddyfresh är inte uppkopplad
Senaste nyheterna

Redaktionens senaste nyhetsrubriker

Senaste privatannonserna

Prylar säljes, köpes, bytes och skänkes

Skänkes
Sök jobb