-1
votes

Comment programmer l'éventualité suivante?

J'ai un tableau avec des noms d'animaux domestiques et un autre tableau parallèle avec les noms des sons qu'ils font. J'écris une méthode apparences () qui demande à l'utilisateur un nom d'animal, puis affiche le son respectif.

Comment est-ce que je code dans un message d'erreur qui dit "Désolé L'animal n'est pas dans notre liste " si l'utilisateur entre quelque chose aléatoire?

Le problème que j'ai maintenant est que avec la relève si , il affiche l'erreur Message quatre fois même si j'entre dans le bon animal. xxx


4 commentaires

La branche sinon doit être en dehors de votre pour boucle. Vous saurez que si l'article n'est pas dans votre liste après avoir vérifié tous ses éléments.


Comment puis-je formater cela? Si j'ajoute le sinon en dehors de la boucle pour la boucle, il ne paire pas avec le si instruction


Vous devez également utiliser break pour quitter la boucle une fois que vous trouverez une correspondance.


@shanko juste la branche, sans le mot clé


4 Réponses :


0
votes

Essayez ceci: xxx

la ligne localpets4.zip (localsounds2, (animal de compagnie, son) => nouveau {animal, son}) correspond à l'élément correspondant à Élément dans le localpets4 et LOCALSoundS2 Tableaux et crée un seul énumérable sous la forme de Nouveau {PET, son} .

Le .where (x => x.pet == userinput2) conserve uniquement les éléments où animal est égal au userinPutation2 . .

Cela devrait signifier que s'il y a une correspondance, il n'y a qu'un match et s'il n'y a pas de correspondance, l'énumérable est vide. Appelant .firstordfault () alors vous avez le seul Nouveau {PET, Sound} qui gère l'entrée ou que vous avez null .

Le reste du code produit simplement la sortie basée sur le résultat .


1 commentaires

Hmmm ... eh bien, je ne peux pas vous défaire pour la exactitude du code. :) Mais c'est un peu d'une fantaisie compte tenu du contexte. L'OP est presque certainement en train d'écrire cela dans le contexte de certains paramètres éducatifs, qu'il s'agisse d'une classe ou de leur propre apprentissage indépendant. J'ai l'impression que vous avez ajouté un moteur 1200cc au vélo, ils viennent de prendre les roues de formation. Peut-être juste leur montrer le array.indexof () la méthode aurait été plus sa vitesse? Cela dit, l'explication est excellente, même si elle n'est pas nécessairement utile à l'auteur de cette question . :)



0
votes

vous pouvez utiliser array.exists (localpets4, x => x.equals (userinput2)); code> Pour vérifier si l'entrée est valide, alors s'il est en boucle pour trouver le son.

if (Array.Exists(localPets4, x => x.Equals(userInput2))) {
    for (int l = 0; l < localPets4.Length; l++)
    {
        if (localPets4[l].Equals(userInput2) {
            Console.WriteLine("{0} makes the sound {1}", localPets4[l], localSounds2[l]);
            Console.WriteLine();
            break;
        }
    }
}
else
    {
         Console.WriteLine("Sorry that item isn't in our list of animals");
    }


6 commentaires

Ouais, désolé - je viens d'attraper ça. Il a été édité.


Si vous n'avez pas besoin de la boucle pour autre chose, alors je suis d'accord avec @Angimativitity. Mais encore une fois, si vous avez besoin de matchs plus approximatifs, vous devrez devenir créatif.


Array.indexof () serait une voie beaucoup plus directe d'y aller. Il effectue la recherche et renvoie l'index exact dans un seul appel, aucune boucle supplémentaire nécessaire.


@Peter Duniho, je suis d'accord et je vous remercie pour le commentaire. Mais comme vous l'avez dit à l'énigmativité, j'ai estimé que c'était une question préparée pour une entreprise éducative. Je n'étais pas sûr si la boucle était nécessaire pour une raison quelconque, que la méthode de l'index de () aiderait à éliminer.


Bien sûr, mais votre réponse ne correspond pas vraiment au "contexte éducatif" de toute façon, je me suis donc imaginé que vous pourriez aussi bien être efficace à ce sujet. :) (et si vous vous demandez ce que je veux dire sur le "contexte éducatif", votre réponse change de manière significative la structure globale du code, et même de manière souhaitable - il oblige deux scans de la matrice au lieu d'un seul ... Il y a deux autres réponses qui restent beaucoup plus proches de l'original, préservant sa structure d'origine tout en étant seulement numérisées à travers la matrice une fois.)


@Peter Duniho, je vois ce que tu dis. Merci. Ce n'est pas vraiment ce que j'aurais allé à ce sujet, j'essayais de rester un peu près du contexte initial. Mais vous avez raison ... d'être honnête, ce que j'ai appris ici est de demander plus de questions de l'intention de l'OP avant d'essayer de répondre. Cela conduirait à des réponses moins bâclées.



0
votes

Puisque vous voulez seulement imprimer cette instruction une fois (si aucun élément n'est trouvé), il doit être retiré de la boucle:

public static void ShowSound(string userInput2, string[] localPets4, string[] localSounds2) 
{ 
    bool itemFound = false;

    for (int l = 0; l < localPets4.Length; l++) 
    { 
        if (userInput2 == localPets4[l])
        { 
            itemFound = true;
            Console.WriteLine("{0} makes the sound {1}", localPets4[l], localSounds2[l]);
            Console.WriteLine(); 
        }
    } 

    if (!itemFound)
    {
        Console.WriteLine("Sorry that item isn't in our list of animals"); 
    }
}


0 commentaires

0
votes

qui est lié à la traversée de votre tableau. Si chaîne [] localpets4 contient 4 éléments, votre pour la boucle itérale 4 fois - Ergo 4 messages d'erreur. Dans votre boucle, vous ne devez faire que la recherche. Ensuite, la logique pour retourner l'utilisateur - sur succès / échec - sera géré en dehors du pour la boucle . XXX

Comme il s'agit d'une relation de 1 à 1 pourrait utiliser un [dictionnaire] [1] , mais je ne sais pas si cela est hors de portée de votre application.


0 commentaires