0
votes

Comment faire fonctionner mes méthodes correctement dans ce cas particulier?

static void Main(string[] args)
{
    int nb1, nb2, AddEvens;
    Console.WriteLine("Que vaut le premier chiffre: ");
    nb1 = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Que vaut le deuxième chiffre: ");
    nb2 = Convert.ToInt32(Console.ReadLine());
    AddEvens = Add(nb1, nb2);
    Console.WriteLine(AddEvens);
}

static int Add(int nb1, int nb2)
{
    for (int i = nb1; i < nb2; nb1++)
    {
        int sum = 0;
        if (nb1 % 2 == 0)
        {
            sum = sum + i;
            return sum;
        }
        return i;
    }
}
I am trying to create a program that can sum up even numbers when they are detected. The first two Console.Readline s ask the user for the range in which it will add up the numbers together.Here are my errors: 
  'Program.Add(int, int)': not all code paths return a value
and
  Unreachable code detected
The first one is at the start of the method creation the other is the nb1++ in the for loop.

1 commentaires

Si (NB1> = NB2), la boucle n'est jamais exécutée. Dans ce chemin d'exécution, selon votre code, il n'y a pas de valeur de retour. C'est ce que le compilateur se plaint. Vous devez retourner une valeur par défaut ou soulever une exception à ce scénario.


3 Réponses :


2
votes

Je pense que vous voulez probablement cela:

if (nb1 <= nb2)
    AddEvens = Add(nb1,nb2);
else
    AddEvens = Add(nb2,nb1)


0 commentaires

0
votes

Tout d'abord, vous devez vous assurer que nb1 code> est inférieur à nb2 code>, sinon vous devez les échanger. Ensuite, vérifiez si nb1 code> est impair, ce qui nécessite que vous l'augmente par 1. Faites enfin votre pour code> Boop Step 2 pour attraper uniquement des chiffres et l'ajouter à Somme code>.
NOTE 1: FORT> SUM code> doit être défini et initialisé en dehors pour code> boucle.
NOTE 2: STRUT> J'ai utilisé car je pense que vous voulez inclure nb2 code> s'il s'agit d'un nombre pair, sinon vous devez utiliser .

static int Add(int nb1, int nb2)
{
    int i, sum = 0;
    if (nb2 < nb1)
    {
        i = nb1;
        nb1 = nb2;
        nb2 = i;
    }
    if (nb1 % 2 != 0)
        nb1++;
    for (i = nb1; i <= nb2; i += 2)
        sum += i;
}


3 commentaires

Cela ne fonctionnera pas pour des nombres négatifs. -5% 2 = -1, pas 1. Vous auriez besoin de le modifier pour être si (NB1% 2! = 0) .


@Rossgurbutt Merci de me le rappeler. Je l'ai corrigé.


J'ai relu mon commentaire et j'ai trouvé cela non accueillant. Je n'aime pas comment on dirait que le code résultant, mais ce n'est pas une raison de commenter ou de voter. Désolé pour la perturbation.



0
votes

Il y a quelques problèmes que vous devez régler dans la méthode donnée.

Erreur du compilateur Si vous observez l'exécution lorsque NB1> = NB2, la boucle n'est jamais exécutée et selon le code, il n'y a pas de valeur de retour. C'est ce que le compilateur se plaint. Vous devez inclure une valeur par défaut lorsque cela se produit.

Autres erreurs Si vous observez / intercalez la déclaration de la boucle et du retour, vous réaliseriez que la méthode reviendrait toujours NB1. C'est parce que vous retournez dans le premier cycle d'exécution de la boucle et n'attend jamais que toute la boucle sera exécutée. Dans la première exécution, vous vérifieriez si le numéro est un nombre pair, si oui, vous retourneriez la somme (qui est 0 + numéro) et s'il s'agit d'un nombre impair, vous retourneriez le nombre lui-même.

Ce dont vous avez probablement besoin, c'est de calculer la somme dans la boucle et de renvoyer le résultat à l'extérieur.

Même ce changement ne corrigerait pas le problème car la boucle ne quitterait pas la déclaration de l'inclusion NB1 ++. Vous êtes incrément NB1 et la condition de boucle I xxx

Ce dont vous auriez besoin est xxx


0 commentaires