J'essaye de convertir le texte dans la console et de l'inverser pour voir s'il s'agit d'un palindrome. Si c'est le cas, alors il retournera true et si ce n'est pas le cas, alors false sera retourné. Cependant, je suis confronté à des erreurs depuis que je suis nouveau et que je viens de commencer à apprendre le C #. L'erreur que j'obtiens est la suivante:
'Palindrome.IsPalindrome (string)': tous les chemins de code ne renvoient pas une valeur
Je ne sais pas comment résoudre cela et je ne le comprends pas très bien , par conséquent, tout conseil serait très apprécié. Merci.
using System;
public class Palindrome
{
public static bool IsPalindrome(string word)
{
char[] temp = word.ToCharArray();
Array.Reverse(temp);
string emordnilap = new string(temp);
if(word.Equals(emordnilap)){
Console.WriteLine("true");
}else{
Console.WriteLine("false");
}
}
public static void Main(string[] args)
{
Console.WriteLine(Palindrome.IsPalindrome("Deleveled"));
}
}
3 Réponses :
Votre méthode est définie comme public static bool IsPalindrome (string word)
Cela signifie qu'elle doit renvoyer un booléen (vrai ou faux).
En fait, vous ne renvoyez rien, vous l'écrivez simplement sur la console, et c'est votre erreur - vous ne renvoyez pas de valeur.
Vous devez mettre return true; ou return false; dans votre code afin que chaque route possible à travers la méthode aboutisse à renvoyer le bool que vous avez spécifié dans la signature de la méthode.
Cela vous pose un autre problème, car vous utilisez Console.WriteLine ( _) où _ est la valeur return de votre méthode IsPalindrome. Puisque vous renvoyez un bool , il est étrange de l'écrire dans la console. Cela fonctionnera, mais une meilleure façon de le faire serait d'appeler la méthode comme celle-ci:
var isPalindrome = Palindrome.IsPalindrome("Deleveled");
if (isPalindrome == true)
{
Console.WriteLine("It IS a palindrome!");
}
Notez que if (isPalindrome == true) code > peut être raccourci en if (isPalindrome)
L'un des aspects fondamentaux de la programmation OO est SOLID, qui sont quelques lignes directrices pour l'écriture de code. L'un de ceux-ci est le principe de responsabilité unique, ce qui signifie essentiellement que vous devriez essayer de faire en sorte que des morceaux de votre code ne fassent qu'une seule chose.
Il est donc préférable pour votre IsPalindrome de ne faire qu'une seule chose - renvoyer vrai ou faux si le mot est un palindrome - et ne fait pas d'autres choses comme écrire sur la console. Laissez cela pour le code qui appelle la méthode.
Juste un indice pour quand votre méthode retourne de manière inattendue false - Racecar n'est pas la même chose que racecaR - vous devrez faire quelque chose au sujet de l'affaire. Un moyen rapide de le faire est d'utiliser ToUpper () pour convertir votre valeur en majuscules avant de l'inverser et de faire la comparaison.
Merci pour les commentaires, après avoir changé la console.WriteLine pour renvoyer vrai et faux, cela fonctionne maintenant. Merci
Votre méthode doit renvoyer un bool au lieu d'écrire dans la console. Essayez comme:
public static bool IsPalindrome(string word)
{
char[] temp = word.ToCharArray();
Array.Reverse(temp);
string emordnilap = new string(temp);
if(word.Equals(emordnilap)){
return true;
}
else{
return false;
}
}
Hrmm ... return word.Equals (emordnilap); ? voté quand même
Merci pour les commentaires. J'aurais dû renvoyer vrai ou faux au lieu de console. Je vous remercie
@RomainB. Oui et après avoir changé l'instruction de retour, j'ai obtenu la sortie. Merci
Ce serait mieux en effet
Chaque chemin que cette méthode peut emprunter pour arriver à sa fin doit renvoyer une valeur booléenne:
using System;
public class Palindrome
{
public static bool IsPalindrome(string word)
{
char[] temp = word.ToCharArray();
Array.Reverse(temp);
string emordnilap = new string(temp);
if(word.Equals(emordnilap))
{
return true;
}
else
{
return false;
}
}
public static void Main(string[] args)
{
//The ToString() converts your boolean to a string
Console.WriteLine(Palindrome.IsPalindrome("Deleveled").ToString());
}
}
Essayez de nommer vos variables de manière plus compréhensible. Cela vous facilitera la vie si vous vous lancez dans des projets plus importants. Voir ici
p>
Le caractère
Dn'est pas égal au caractèred. Vous devez utiliser la comparaison sans tenir compte de la casse. Tout votre code peut être écrit sur une seule ligne:Console.WriteLine (word.Equals (word.Reverse (), StringCompariso n.CurrentCultureIgno reCase)));besoin de renvoyer une valeur de la méthode à l'aide de l'instruction return
Il n'y a pas de
returndansIsPalindrome ()