Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 12:45 Der er 25 kommentarer og
2 løsninger

Kan i forklare denne?

Ok, så prøver vi

min klasse hedder Dices og her er et bud på en løsning jeg har ledt efter til at lave et scoreboard

Et af problemer er at vi kun har benyttet Console:writeLine så jeg er i tvivl om hvordan jeg skal skrive til min txtbox. Jeg har ikke kunnet finde noget i mine bøger jeg kan bruge. Jeg kan heller ikke rigtigt gennemskue hvad der sker i nedenstående, jeg får et par fejl

private void Button2_Click(object sender, System.EventArgs e)
        {
            int ValidateAces(int[] Dices)
            {
                if(Dices.Length != 5)
                    throw new Exception();
                int score = 0;
                foreach(int i in Dices)
                {
                    if(Dices[i]==1)
                        score += Dices[i];
                }
                return score;
            }


                txtAces.Text= // hvad skal jeg have her?
Avatar billede arne_v Ekspert
09. oktober 2004 - 12:54 #1
Prøv:

txtAces.Text = score.ToString();
Avatar billede arne_v Ekspert
09. oktober 2004 - 12:57 #2
Nej:

txtAces.Text = ValidateAces(noget).ToString();
Avatar billede snepnet Nybegynder
09. oktober 2004 - 13:03 #3
du gør igen det at du lægger en metode ind i en anden metode :

private void Button2_Click
er handleren af dit klik-event

int ValidateAces(int[] Dices)
går jeg udfra er en metode du gerne vil have, så den skal ligge for sig selv, og hvis du gerne vil have den kaldt med et array af integers, skal det komme et eller andet sted fra.

Så noget i stil med :

private void Button2_Click(object sender, System.EventArgs e)
{
  int[] dices = new int[5];
 
  // sæt værdierne af hver integer i arrayet her
 
  // og kald så din metode som returnere dit resultat
  txtAces.Text = ValidateAces(dices).ToString();
}

// har ændret navnet lidt
private int CalculateScore(int[] Dices)
{
  if(Dices.Length != 5)
      throw new Exception();
  int score = 0;
  foreach(int i in Dices)
  {
      if(Dices[i]==1)
        score += Dices[i];
  }
  return score;
}

mvh
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 15:24 #4
ok, jeg roder lidt videre men hvor eller rettere måske, hvordan finder jeg f.eks. info om forskellige ting jeg er i tvivl om eks. som her hvordan jeg skriver til en textbox. Det er irriterende og sidde og mangle lige sådan noget, der kan være mange ting også. Når jeg søger i VS kommer der et hav af muligheder men jeg syntes det er svært at få det snævret ind til hvad jeg (sommetider) leder efter.
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 17:01 #5
ok, jeg har skrevet det ned på et stykke papir nu, så det giver lidt mere mening, der er dog en ting jeg er meget i tvivl om og det er dette :

// sæt værdierne af hver integer i arrayet her

ellers kan jeg få resten til at give mening, ja det mener jeg da
Avatar billede arne_v Ekspert
09. oktober 2004 - 17:16 #6
int[] dices = new int[5];
for(int i = 0; i < dices.Length; i++) dices[i] = rolldice();

eller noget i den stil.
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 17:49 #7
jeg fandt endelig et eksempel i min bog, det er godt at få forstand af så jeg nævner det lige:

Det er kun et udsnit af noget mere med noget udskrivning også men selve teknikken er beskrevet således

string myText = "To b or not to be said the bee";
int bCounter = 0;
for (int i=0; i<myText.Lenght;i++)
{
if (myText[i].Tostring().ToUpper()=="B")
bCounter++

::::: Her kommer selve udskrivningen:::::

Se det fik mig til at forstå lidt, det kan være det kan hjælpe nogen med samme problemer som mig.

Så nu forstår jeg jo at denne er uden værdier  int[] dices = new int[5];

hehe ::::: Lad os nu se hvor langt det holder::::::



}
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 18:01 #8
ja se nu compiler den fint nok men den rejser en fejl, den brokker sig over at if (Dices [i]==1)

Er uden for arrayets grænser?
Avatar billede arne_v Ekspert
09. oktober 2004 - 18:04 #9
Så må værdien af i jo være for stor. Check for løkken.
Avatar billede snepnet Nybegynder
09. oktober 2004 - 18:09 #10
Prøv det her "max".... et stille og roligt eksempel, men det burde fungere, og så kan du jo tage udgangspunkt i det.

// en aspx-fil
<%@ Page language="c#" Codebehind="Dices.aspx.cs" AutoEventWireup="false" Inherits="EXP2.Dices" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Dices</title>
        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <P><asp:panel id="dicePanel" runat="server">
                    <asp:Image id="Image1" runat="server"></asp:Image>
                    <asp:Image id="Image2" runat="server"></asp:Image>
                    <asp:Image id="Image3" runat="server"></asp:Image>
                    <asp:Image id="Image4" runat="server"></asp:Image>
                    <asp:Image id="Image5" runat="server"></asp:Image>
                    <asp:Image id="Image6" runat="server"></asp:Image>
                </asp:panel></P>
            <P>
                <TABLE id="Table1" style="WIDTH: 152px; HEIGHT: 138px" cellSpacing="1" cellPadding="1"
                    width="152" border="0">
                    <TR>
                        <TD style="WIDTH: 200px">Ettere</TD>
                        <TD>
                            <asp:TextBox id="txtEttere" runat="server" Width="48px"></asp:TextBox></TD>
                    </TR>
                    <TR>
                        <TD style="WIDTH: 200px">Toere</TD>
                        <TD>
                            <asp:TextBox id="txtToere" runat="server" Width="48px"></asp:TextBox></TD>
                    </TR>
                    <TR>
                        <TD style="WIDTH: 200px">Treere</TD>
                        <TD>
                            <asp:TextBox id="txtTreere" runat="server" Width="48px"></asp:TextBox></TD>
                    </TR>
                    <TR>
                        <TD style="WIDTH: 200px">Firere</TD>
                        <TD>
                            <asp:TextBox id="txtFirere" runat="server" Width="48px"></asp:TextBox></TD>
                    </TR>
                    <TR>
                        <TD style="WIDTH: 200px">Femmere</TD>
                        <TD>
                            <asp:TextBox id="txtFemmere" runat="server" Width="48px"></asp:TextBox></TD>
                    </TR>
                    <TR>
                        <TD style="WIDTH: 200px">Seksere</TD>
                        <TD>
                            <asp:TextBox id="txtSeksere" runat="server" Width="48px"></asp:TextBox></TD>
                    </TR>
                </TABLE>
            </P>
            <P><asp:button id="btnRollDices" runat="server" Text="Slå med terningerne"></asp:button></P>
        </form>
    </body>
</HTML>


// og en code-behind fil
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace EXP2
{
    public class Dices : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Panel dicePanel;
       
        protected System.Web.UI.WebControls.Image Image1;
        protected System.Web.UI.WebControls.Image Image2;
        protected System.Web.UI.WebControls.Image Image3;
        protected System.Web.UI.WebControls.Image Image4;
        protected System.Web.UI.WebControls.Image Image5;
        protected System.Web.UI.WebControls.Image Image6;
       
        protected System.Web.UI.WebControls.Button btnRollDices;
       
        protected System.Web.UI.WebControls.TextBox txtEttere;
        protected System.Web.UI.WebControls.TextBox txtToere;
        protected System.Web.UI.WebControls.TextBox txtTreere;
        protected System.Web.UI.WebControls.TextBox txtFemmere;
        protected System.Web.UI.WebControls.TextBox txtSeksere;
        protected System.Web.UI.WebControls.TextBox txtFirere;

        protected Random rnd = new Random();
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!IsPostBack)
                RollDices();
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.btnRollDices.Click += new System.EventHandler(this.btnRollDices_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }

        private void btnRollDices_Click(object sender, System.EventArgs e)
        {
            RollDices();
        }

        private void RollDices()
        {
            // vi opretter nogle variable til at holde resultaterne i
            int ettere = 0;
            int toere = 0;
            int treere = 0;
            int firere = 0;
            int femmere = 0;
            int seksere = 0;

            // vi kigger panelet igennem efter "terninger"
            foreach(Control c in dicePanel.Controls)
            {
                // jeg betragter bare et billede som en terning :o)
                if(c is Image)
                {
                    // først "slår vi med terningen"
                    int side = RollDice();

                    // sæt det rigtige billede på terningen
                    ((Image)c).ImageUrl = String.Format(Request.ApplicationPath + "/Images/Dices/dice{0}.jpg", side);

                    // tæl den aktuelle variabel 1 op
                    switch(side)
                    {
                        case 1 :
                            // optæl antallet af 1'ere
                            ettere++;
                            break;
                        case 2 :
                            // optæl antallet af 2'ere
                            toere++;
                            break;
                        case 3 :
                            // optæl antallet af 3'ere
                            treere++;
                            break;
                        case 4 :
                            // optæl antallet af 4'ere
                            firere++;
                            break;
                        case 5 :
                            // optæl antallet af 5'ere
                            femmere++;
                            break;
                        case 6 :
                            // optæl antallet af 6'ere
                            seksere++;
                            break;
                    }
                }

                // sæt antallet af hver type slag i tekstboksene
                txtEttere.Text = ettere.ToString();
                txtToere.Text = toere.ToString();
                txtTreere.Text = treere.ToString();
                txtFirere.Text = firere.ToString();
                txtFemmere.Text = femmere.ToString();
                txtSeksere.Text = seksere.ToString();
            }
        }

        // rutine til at slå med en terning
        private int RollDice()
        {
            return rnd.Next(1,7);
        }
    }
}

håber du kan bruge det til noget.

mvh
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 19:36 #11
jamen jeg kigger da på det, det er da helt klart jeg gør, bliver meget spændende at få det ind i VS. MEN jeg ville meget gerne vide hvad der går galt med min for løkke, hvis jeg kunne forstå det så kunne det være jeg havde lidt mere at "skyde med"
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 20:05 #12
det ser meget spændende ud men igen mangler jeg viden, lad os sige at jeg gerne ville beholde metoden med knapper (det er for at undgå snyd længere frem men det kan være at det er dårligt tænkt)Kunne jeg så have:

private void Button2_Click(object sender, System.EventArgs e)
{
txtEttere.Text = ettere.ToString();
}

Jeg skal lige se om jeg kan hitte ud af resten du har lavet
Avatar billede snepnet Nybegynder
09. oktober 2004 - 20:06 #13
hej igen "max" - hvis det er denne forløkke du mener :

string myText = "To b or not to be said the bee";
int bCounter = 0;
for (int i=0; i<myText.Lenght;i++)
{
if (myText[i].Tostring().ToUpper()=="B")
bCounter++

så ræser den fra 0 til længden af strengen myText, som jo er temmelig lang i forhold til et array med 5-6 terninger.

men umiddelbart refererer du slet ikke dine terninger i det eksempel du har sendt, så det er ikke sådan lige at sige hvad der er kikset.
hvis du smider koden som der ser ud nu herud, tager jeg gerne en kigger.

mvh
Avatar billede snepnet Nybegynder
09. oktober 2004 - 20:07 #14
nåda... så ikke lige at du sendte noget, men jeg forstår det heller ikke helt...

private void Button2_Click(object sender, System.EventArgs e)
{
txtEttere.Text = ettere.ToString();
}

hvor har du eller noget stående omkring variablen ettere ?
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 20:23 #15
ok, skal prøve at være mere "klar"

mht denne, så er det jeg spørger om; hvis jeg tager dit eksempel og vil kombinere med mine knapper i scoreboardet kunne jeg så gøre sådan?

private void Button2_Click(object sender, System.EventArgs e)
{
txtEttere.Text = ettere.ToString();
}


altså have min variabel som du skriver og tælle den op i en switch?

Min forløkke der laver ballade: for(int i = 0; i < Dices.Length; i++)
                Dices[i] = RollDice();

Dices er vel [5]når det ser sådan ud int [] Dices = new int[5]; ?
Avatar billede maxmuldjord Nybegynder
09. oktober 2004 - 21:02 #16
private void Button2_Click(object sender, System.EventArgs e)
        {
            int [] Dices = new int[5];
            for(int i = 0; i < Dices.Length; i++)
                Dices[i] = RollDice();


           
            txtAces.Text = CalculateScore(Dices).ToString();
        }

        private int CalculateScore(int[]Dices)
        {
            if (Dices.Length !=5)
                throw new Exception();
            int score =0;
            foreach (int i in Dices)
            {
                if (Dices [i]==1)
                    score+= Dices [i];
            }
            return score;
        }
           
                 
    }
}
Avatar billede maxmuldjord Nybegynder
10. oktober 2004 - 12:36 #17
ok nu har jeg forsøgt at sætte lidt ord på men det vil stadigvæk ikke. Som jeg læser i min bog står der at score+=Dices [i] er score = score+Dices [i]så den er vel ikke helt gal hvis jeg forstår det sådan at med udgangspunkt i ovenstående 09/10-2004 21:02:24 så er score = 0, hvis i er = 1, ja så lægges der 1 til i og 1 til score?
For at gørre min tankerække færdig har jeg i stedet for score+=Dices[i] forsøgt med score++ med samme resultat. Der er noget jeg overser men hvad?
Avatar billede snepnet Nybegynder
10. oktober 2004 - 15:05 #18
Kan du ikke lige skrive om det stadig bare er 1'ere du vil tælle - eller om det er totalen ?

Men ellers hvis det er 1'ere du kigger efter:
        private int CalculateAces(int[]Dices)
        {
            if (Dices.Length !=5)
                throw new Exception();
           
            int aces = 0;
            foreach (int i in Dices)
            {
                if (i==1)
                    aces++;;
            }
            return aces;
        }

Og hvis det er summen du er ude efter :
        private int CalculateSum(int[]Dices)
        {
            if (Dices.Length !=5)
                throw new Exception();
           
            int sum = 0;
            foreach (int i in Dices)
            {
              sum+=i;
            }
            return sum;
        }

mvh
Avatar billede maxmuldjord Nybegynder
10. oktober 2004 - 15:35 #19
tak igen ! Jo det jeg ville var at jeg ville kigge efter hvor mange 1'ere der er med knappen 1, hvormange 2'ere med knappen 2 osv dvs. at er der i funktionen (knap1) er 3 1' ere skal den skrive 3. Jeg tænkte så at når jeg havde løsningen til knap nr 1 kunne jeg overfører det til de andre.
Avatar billede maxmuldjord Nybegynder
10. oktober 2004 - 15:38 #20
jeg har ellers prøvet en anden løsning baseret på dit forslag. Jeg har været ved at prøve om jeg kunne få denne til at virke men jeg kan ikke få den til at skrive, den bygger ellers fint nok:

private void Button2_Click(object sender, System.EventArgs e)
        {
           

        txtAces.Text= Aces.ToString();
           
           
        }

        private void CalculateScore()
        {
            int Aces = 0;
            int Twos = 0;
            int Threes = 0;
            int Fours = 0;
            int Fives = 0;
            int Sixes = 0;
            switch(RollDice())
            {
                case 1 :
                    // optæl antallet af 1'ere
                    Aces++;
                    break;
                case 2 :
                    // optæl antallet af 1'ere
                    Twos++;
                    break;
                case 3 :
                    // optæl antallet af 1'ere
                    Threes++;
                    break;
                case 4 :
                    // optæl antallet af 1'ere
                    Fours++;
                    break;
                case 5 :
                    // optæl antallet af 1'ere
                    Fives++;
                    break;
                case 6 :
                    // optæl antallet af 1'ere
                    Sixes++;
                    break;
                   

            }
           
        }
           
                 
    }
}
Avatar billede snepnet Nybegynder
10. oktober 2004 - 17:14 #21
hvor kalder du CalculateScore() fra, og hvad er Aces i funktionen Button2_Click(...) ?
Avatar billede snepnet Nybegynder
10. oktober 2004 - 18:27 #22
Forøvrigt "max".... har du prøvet at følge denne her :
http://www.html.dk/tutorials/aspnet/
Den giver en ganske udmærket introduktion.
mvh
Avatar billede maxmuldjord Nybegynder
10. oktober 2004 - 19:12 #23
hmmm. ovenstående er forskellige eksperimenter jeg har lavet da jeg ikke rigtigt er klar over fremgangsmåden. jeg er stadigvæk i tvivl om regler for at skrive til min textbox. Meningen var at jeg ville kalde CalculateScore fra knappen men det kom der hele tiden fejlmeddelser i min "skrive funktion" så derfor ser det lidt bøvet ud. Det jeg gerne ville have haft var / er en funktion som du har i linie 56 i det eksempel 09/10-2004 18:09:04. Jeg prøvede dit råd fra 10/10-2004 15:05:36 men kan ikke få det til at spille, jeg kan ikke rigtigt blive klar over om det virker ved et "slag" men det virker i alt fald ikke ved flere. jeg kommer til at lade dette hvile et stykke tid, jeg er kommet for langt bagefter med min skole. Jeg skal til at læse mig frem til at skrive en "mandomsprøve" ja sikke noget p*s men det er min lærers ord! Vi skal til at lave en telefonbog med opret, slet og find, der skal være en klasse til bruger interaktion og ja det skal kører i konsollen 8( men skal være forberedt til grafisk brugerflade hvad dælen der så menes med det. Så jeg må hellere komme i gang med at læse, så må mine terninger vente lidt, det betyder ikke de bliver glemt, tværtimod så skal det komme til at virke, om så det bliver med hujen og skrigen, virke skal det.
Avatar billede maxmuldjord Nybegynder
08. oktober 2005 - 17:42 #24
hmm skulle vi ikke lukke denne her - en gammel sag er det jo
Avatar billede snepnet Nybegynder
09. oktober 2005 - 00:43 #25
ja det kunne da være det var ved at være ved de tider :o)
- du kan få et svar her, og et fra arne ville også være passende.
mvh
Avatar billede arne_v Ekspert
09. oktober 2005 - 09:17 #26
.
Avatar billede maxmuldjord Nybegynder
09. oktober 2005 - 11:51 #27
ja nu skal i ikke gå helt bananas over alle de point 8>)

fordelingen er helt tilfældig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester