3
votes

A Console.WriteLine ("texte" + fonction (paramètre)); ne fonctionne pas mais cette instruction est divisée en deux consoles.

J'ai commencé à utiliser C # il y a quelques jours dans le cadre d'un cours d'algorithme. J'ai un devoir et il y a quelque chose dont j'ai besoin d'explication. J'ai besoin de créer un jeu du pendu avec trois niveaux, chaque niveau a quatre mots à deviner.

Ce que je veux imprimer à l'écran est:

Niveau 1: oooo
Niveau 2: oooo
Niveau 3: oooo

Le "cercle vide" sera rempli chaque fois qu'un mot est trouvé dans un niveau.

Pour rendre ceci, j'ai décidé de créer un char [] .

Voici la fonction que j'utilise:

Console.WriteLine("Level 1 : " + DisplayEmptyCircles(firstLevel));

Quand j'utilise ces deux instructions séparées, tout se passe bien:

Console.Write("Level 1 : ");
Console.Write(DisplayEmptyCircles(firstLevel));

Mais j'ai d'abord utilisé celle-ci et j'ai obtenu un System.Char [] imprimé à la place des cercles vides:

public static char[] DisplayEmptyCircles(List<string> listLevel)
{
    char[] emptyCircle = new char[listLevel.Count];
    for (int counterCircles = 0; counterCircles < listLevel.Count; counterCircles++)
    {
        emptyCircle[counterCircles] = Convert.ToChar(9675);             
    }
    return emptyCircle;
}

Quelqu'un peut-il me dire pourquoi?

Je suis désolé, je sais que la question a déjà été posée mais je ne sais presque rien sur C #. C'est juste pour commencer à apprendre et à comprendre.

c#

1 commentaires

Si vous l'appelez séparément, l'un des overloads est utilisé, ce qui fait un travail supplémentaire pour vous.


3 Réponses :


4
votes

Votre DisplayEmptyCircles renvoie un tableau de char , il ne peut donc pas être concaténé en une chaîne. Vous pouvez soit faire en sorte que votre fonction renvoie une chaîne, soit convertir son résultat en chaîne lorsque vous appelez Console.Write .

Si vous souhaitez simplement créer une chaîne contenant N cercles, vous pouvez le faire de manière plus simple:

public static string DisplayEmptyCircles(int count)
{
    return new string((char)9675, count);
}

Console.WriteLine("Level 1 : " + DisplayEmptyCircles(firstLevel.Count));

Quelques modifications supplémentaires dans le code: p >

  • Il n'utilise pas char [] et utilise String (char c, int count) constuctor
  • DisplayEmptyCircles n'a pas réellement besoin d'informations sur les niveaux, il n'a besoin que du nombre
  • Vous n'avez pas besoin d'utiliser Convert.ToChar , car il ne fait que des vérifications supplémentaires, qui sont redondantes lorsque vous avez une valeur constante


0 commentaires

3
votes

La Console.WriteLine convertit votre tableau de caractères en chaîne . Mais il ne peut pas convertir la combinaison de chaîne + tableau de caractères . Vous devez donc convertir le tableau de caractères en chaîne . Vous pouvez le faire dans votre fonction statique ou à la volée.

Dans votre fonction statique:

Console.WriteLine("Level 1 : " + new string(DisplayEmptyCircles(firstLevel)));

À la volée:

public static string DisplayEmptyCircles(List<string> listLevel)
{
    char[] emptyCircle = new char[listLevel.Count];
    for (int counterCircles = 0; counterCircles < listLevel.Count; counterCircles++)
    {
        emptyCircle[counterCircles] = Convert.ToChar(9675);             
    }
    return new string(emptyCircle);
}

UPDATE:

Si vous voulez convertir le char [] dans la fonction statique, vous devrait utiliser l'approche de Yeldar Kurmangaliyev !


0 commentaires

2
votes

En effet, Console.Write () utilisera char [] comme entrée et dans Console.WriteLine (...) vous se terminera par la conversion de char [] en chaîne avec la méthode .ToString () . Utilisez nouvelle chaîne (DisplayEmptyCircles (firstLevel))

Console.WriteLine("Level 1 : " + new string(DisplayEmptyCircles(firstLevel)));


0 commentaires