2010-11-05 15 views
3

Je voudrais voir label6 afficher le nombre d'heures correctes que l'utilisateur choisit le nombre. Et label7 affiche le nombre de fois que l'utilisateur a mal choisi. Ce n'est pas en incrémentant d'un.Incrémenter le nombre par 1

erreur 1 Opérateur '++' ne peut pas être appliqué à l'opérande de type 'chaîne' Erreur 2 'de ++' opérateur ne peut pas être appliqué à l'opérande de type 'chaîne'

private void button1_Click(object sender, EventArgs e) 
    { 
     string correct="0"; 
     string incorrect="0"; 
     RandomNumber(0,99); 
     button2.Enabled = true ; 
     button1.Enabled = false; 
     label3.Visible = true; 
     if (textBox1.Text == label1.Text) 
      label3.Text=("Winner"); 
       label6.Text = correct +1; 
       if (textBox1.Text != label1.Text) 
        label7.Text = incorrect= +1; 
      label3.Text=(string.Format("Sorry - You Lose, The number is {0}", label1.Text)); 

    } 


Modifier (De la réponse d'OP à sa propre question):

J'ai essayé les manières votre suggérant mais le nombre n'augmente pas par un chaque fois que je suppose mal.

private void button1_Click(object sender, EventArgs e) 


    { 
     int correct=0; 
     int incorrect=0; 
     RandomNumber(0,99); 
     button2.Enabled = true ; 
     button1.Enabled = false; 
     label3.Visible = true; 
     if (textBox1.Text == label1.Text) 
     { 
      label3.Text = ("Winner"); 
      label6.Text = (++correct).ToString(); 
     } 

     else if (textBox1.Text != label1.Text) 
     { 
      label7.Text = (incorrect+1).ToString(); 

      label3.Text = (string.Format("Sorry - You Lose, The number is {0}", label1.Text)); 
     } 


    } 
+0

Ou ' "" + (int.Parse (correct) +1);' – Margus

+0

Est-ce que même compilez? –

+4

Même si cela fonctionne, la suggestion de Margus est * The Wrong Way ™ * – Brian

Répondre

4

En ajoutant aux chaînes, correct et incorrect ajoutera simplement la représentation sous forme de chaîne de ce qui est ajouté. Vous devez le convertir en un type entier, puis incrémenter, puis le convertir en chaîne. Cependant, il serait plus facile de garder ces variables en tant que variables d'instance entières. De cette façon, l'incrémentation est triviale et vous gardez le compte correct et ne pas réinitialiser chaque fois que le bouton est cliqué.(Il y a en fait un certain nombre de problèmes avec le code)

// instance variables 
private int correct = 0; 
private int incorrect = 0; 

private void button1_Click(object sender, EventArgs e) 
{ 
    RandomNumber(0,99); 
    button2.Enabled = true ; 
    button1.Enabled = false; 
    label3.Visible = true; 
    if (textBox1.Text == label1.Text) 
    { 
     label3.Text=("Winner"); 
     label6.Text = (++correct).ToString(); // convert int to string 
    } 
    // indentation does not indicate the block 
    else //if (textBox1.Text != label1.Text) 
    { 
     label3.Text=(string.Format("Sorry - You Lose, The number is {0}", label1.Text)); 
     label7.Text = (++incorrect).ToString(); 
    } 
} 
10

Il ne semble pas que vous êtes persistant et la correctincorrect

Créer des propriétés:

public int Correct { get; set; } 
public int Incorrect { get; set;} 

Puis:

private void button1_Click(object sender, EventArgs e) 
{ 
    RandomNumber(0,99); 
    button2.Enabled = true ; 
    button1.Enabled = false; 
    label3.Visible = true; 

    if (textBox1.Text == label1.Text) 
    { 
    label3.Text=("Winner"); 
    label6.Text = (++this.Correct).ToString(); 
    } 
    else 
    { 
     label3.Text=(string.Format("Sorry - You Lose, The number is {0}", label1.Text)); 
     label7.Text = (++this.Incorrect).ToString(); 
    } 
} 
+0

+1, mais je pense vraiment que vous auriez dû éditer l'indentation, aussi. – Brian

+0

Alors que * techniquement correct * (le meilleur type de correct ;-)), j'hésite à upvote cela en raison de l'indentation, même si elle reflète l'original terriblement formaté. –

+0

Là j'ai fixé l'indentation j'espère que je n'ai pas mal compris sa logique. – Gabe

8

Vous stockez votre correcte et variables incorrectes comme string.

Utilisez int plutôt comme ceci:

int correct = 0; 
int incorrect = 0; 

et changer votre code:

correct++; 
label6.Text = correct.ToString(); 

et:

incorrect++; 
label7.Text = incorrect.ToString(); 
+0

Ne devrait-il pas être 'label6.Text = correct.ToString()' et 'label7.Text = incorrect.ToString();' à la place? Il n'y a pas de conversion implicite de 'int' en' string'. – Brian

+0

Oui merci, il y a quelques années que j'ai fait C#. J'ai corrigé l'exemple. –

1

Ou vous pouvez utiliser:

correcte = correct + 1; (Je pense que c'est ce que vous essayiez d'obtenir) incorrect = incorrect + 1;

OU

correct + = 1; incorect + = 1;

0
label6.Text = correct +1; 

définit uniquement la valeur de label6 pour corriger + 1; cela ne change pas la valeur de correct. Si vous utilisez:

int correct; 
label6.Text = (++correct).ToString(); 

vous devriez voir ce que vous voulez.

+0

Oui, mais étant donné que la variable locale est correcte, la modifier est inutile car elle ne sera pas conservée. – Brian

+0

@Brian: c'est correct; J'aurais dû être plus clair et j'ai déclaré que la variable devrait être déclarée comme un int par opposition à une chaîne. Merci d'avoir fait remarquer cela. –

Questions connexes