C# probleem

Status
Niet open voor verdere reacties.

C#HelpMe

Gebruiker
Lid geworden
5 jan 2010
Berichten
20
De volgende code heb ik al in Visual Studio 2010 staan:

Hoe kan ik ervoor zorgen dat q iedere keer optelt? Dit moet er uiteindelijk weergegeven worden totdat de laatste waarde 0 is:
10 green bottles
10 green bottles
1 green bottles eraf
9 green bottles

9 green bottles
9 green bottles
1 green bottles eraf
8 green bottles

8 green bottles
8 green bottles
1 green bottles eraf
7 green bottles

etc.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace _8._10
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int x, y, q;
            x = 10;
            q = 1;
            y = x - q++;
              
                        
            textBox2.AppendText(x + " green bottles, hanging on a wall" + x + "green bottles hanging on a wall" + "If 1 green bottle were to accidentally fall" + "There'd be" + y + "green bottles hanging on the wall");
            textBox2.AppendText(y + " green bottles, hanging on a wall" + y + "green bottles hanging on a wall" + "If 1 green bottle were to accidentally fall" + "There'd be" + y + "green bottles hanging on the wall");
           
           
            
        }

    }
}
 
Laatst bewerkt door een moderator:
Dit kun je toch gewoon doen in een lusje?
Code:
for (int x = 10; x > 0; x--)
{
textBox2.AppendText(x + " green bottles, hanging on a wall " + x + " green bottles hanging on a wall. If 1 green bottle were to accidentally fall. There'd be " + (x - 1) + " green bottles hanging on the wall");
}

Zo iets?
Niet getest, maar volgens mij is ie :thumb:

Gr,
Mathijs
 
Super het werkt idd. Ik heb wel nog een vraagje: waarom is het x--? Ik begrijp ook niet hoe dit dan werkt: (x - 1).

Als x bv. 9 is, dan krijg je x-1= 8, maar wat betekent die x-- dan?

En hoe kan ik ervoor zorgen dat iedere zin op een nieuwe regel begint?
 
Laatst bewerkt:
x-- is het hetzelfde als x-1

Als je iets op een nieuwe regel wil dan voeg je elke keer een \n toen aan de string
Dus dan wordt het:

Code:
textBox2.AppendText(x + " green bottles, hanging on a wall" + x + " green bottles hanging on a wall. If 1 green bottle were to accidentally fall. There'd be " + (x - 1) + " green bottles hanging on the wall[COLOR="Red"]\n[/COLOR]");
 
Hoe kan x eigenlijk iedere keer een nieuwe waarde (zoals 9, 8, 7, 6, etc.) krijgen? Want je hebt in het begin toch x = 10 aangegeven. Hoe weet het programma dan dat hij de nieuwe waarde van x moet gebruiken? (x is dan toch geen variabele meer?)

(Ps. Waar kan ik mijn account naam veranderen?)
 
Laatst bewerkt:
Als je een loop maakt die eruit ziet als dit:

Code:
for (int x = 10; x > 0; x--){
 //hier code om een string te printen
}

Wat dit betekent is het volgende:

Code:
for (int x = 10; [COLOR="Red"]Voor elke x[/COLOR]
x > 0; [COLOR="Red"]zo lang x groter is dan 0[/COLOR]
x--) [COLOR="Red"]Haal na elke loop 1 van x af[/COLOR]

Dus wat het programma dan gaat doen is de loop doorlopen
Code:
for (int x = 10; x > 0; x--){
   We beginnen met x = 10
} //Zodat hij bij deze bracket is voert hij de x-- (oftewijl x = x-1) uit en gaat hij weer terug naar het woord for

Dus de tweede keer dat hij de loop doorloopt gebeurt het volgende:
for (int x = 9; x > 0; x--){
  Met de bewerkingen hier heeft x nu de waarde 9
} // hier weer x-- en weer terug naar het woordje for

Bij de derde keer dat je de loop doorloopt gebeurt het volgende:

for (int x = 8; x > 0; x--){
  Met de bewerkingen hier heeft x nu de waarde 8
} 
enz......
 
Als je een loop maakt die eruit ziet als dit:

Code:
for (int x = 10; x > 0; x--){
 //hier code om een string te printen
}

Wat dit betekent is het volgende:

Code:
for (int x = 10; [COLOR="Red"]Voor elke x[/COLOR]
x > 0; [COLOR="Red"]zo lang x groter is dan 0[/COLOR]
x--) [COLOR="Red"]Haal na elke loop 1 van x af[/COLOR]

Dus wat het programma dan gaat doen is de loop doorlopen
Code:
for (int x = 10; x > 0; x--){
   We beginnen met x = 10
} //Zodat hij bij deze bracket is voert hij de x-- (oftewijl x = x-1) uit en gaat hij weer terug naar het woord for

Dus de tweede keer dat hij de loop doorloopt gebeurt het volgende:
for (int x = 9; x > 0; x--){
  Met de bewerkingen hier heeft x nu de waarde 9
} // hier weer x-- en weer terug naar het woordje for

Bij de derde keer dat je de loop doorloopt gebeurt het volgende:

for (int x = 8; x > 0; x--){
  Met de bewerkingen hier heeft x nu de waarde 8
} 
enz......

Dit klopt niet 100% de logica is wel zo maar hij loopt niet meer door het eerste deel van de loop.. Het gaat eigenlijk als volgt..

int x = 8; 8 > 0; x--
int x = 8; 7 > 0; x--
int x = 8; 6 > 0; x--
int x = 8; 5 > 0; x--
int x = 8; 4 > 0; x--
...

Je kan dit trouwens perfect bekijken met de debugger (f11)!
 
Dit klopt niet 100% de logica is wel zo maar hij loopt niet meer door het eerste deel van de loop.. Het gaat eigenlijk als volgt..

int x = 8; 8 > 0; x--
int x = 8; 7 > 0; x--
int x = 8; 6 > 0; x--
int x = 8; 5 > 0; x--
int x = 8; 4 > 0; x--
...

Je kan dit trouwens perfect bekijken met de debugger (f11)!

Je hebt helemaal gelijk, maar als aanvulling om duidelijk te maken van wat er nu precies gebeurt: low-level heb je geen for-loops, dus in zekere zin is een for-loop gewoon wat syntax sugar
voor een constructie als het onderstaande, want naar zoiets zal de compiler het vertalen (het kan anders geïmplementeerd worden, maar het zal op hetzelfde neerkomen):

[cpp]
int x = 8;
begin:
if (x <= 0) goto einde;
// code die tijdens de for-loop moet worden uitgevoerd
x--;
goto begin;
einde:
// code die na de for-loop komt
[/cpp]

En zoals Dieterke al aangaf is hier duidelijk te zien dat het eerste gedeelte van een for-loop slechts één keer gebruikt wordt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan