2
votes

Javascript - Comment écrire une fonction qui trouve le nombre maximum dans n'importe quel ensemble d'arguments numériques

Je suis en train de terminer un exercice sur JavaScript Hero ( https://www.jshero.net/en/success.html ) et j'ai pu faire fonctionner la fonction, cependant, j'espère que quelqu'un pourrait me dire POURQUOI cela fonctionne. J'apprécierais vraiment.

Le défi est ... "Ecrire une fonction max qui calcule le maximum d'un nombre arbitraire de nombres. Exemple: max (1, 2) doit renvoyer 2 et max (2, 3, 1) doit renvoyer 3."

Ma réponse est ...

function max (){

    let ans=0;

    for (let i = 0; i < arguments.length; i++) {
        if (arguments[i] > ans){
            ans= arguments[i];
        }
    }
    return ans;
}

Ce que je ne comprends pas, c'est de mettre ans à zéro, puis de dire si les arguments [i] sont supérieurs à zéro, alors c'est la réponse. Le premier argument sur zéro ne serait-il pas théoriquement renvoyé comme réponse? Aussi, que faire si vos arguments passés sont des nombres négatifs, (-1, -5, -15) par exemple? La fonction ne fonctionnerait-elle pas alors?

J'apprécierais vraiment toute contribution à ce sujet. Même si j'ai la bonne réponse, je veux comprendre ce qui se passe dans le code. Merci! :)


4 commentaires

peut-être que certaines contraintes sont données, comme aucune valeur négative ou au moins un argument.


une solution plus appropriée définirait les ans initiaux comme étant le premier élément du tableau, puis bouclerait à partir de l'élément 1. (renvoyant probablement undefined si le tableau est vide)


Vous devez indenter correctement votre code, vous verrez la boucle for sur args. Oui également, pour les nombres négatifs, cela échouera. Essayez d'initier ans en tant que NaN, et dans la boucle, vérifiez s'il s'agit de NaN avant la vérification supérieure réelle


Alnitak - Super adivice. Merci. J'ai essayé cela et cela a également fonctionné pour tous les nombres négatifs. Netizen- Merci pour votre réponse. Pouvez-vous expliquer un peu plus cette dernière phrase? Je continue d'apprendre.


3 Réponses :


2
votes

Vous pouvez prendre le premier paramètre comme valeur maximale locale et effectuer une itération à partir du deuxième paramètre.

function max() {
    let ans = arguments[0];

    for (let i = 1; i < arguments.length; i++) {
        if (arguments[i] > ans) {
            ans = arguments[i];
        }
    }
    return ans;
}

console.log(max());
console.log(max(3, 2, 1));


0 commentaires

2
votes

On dirait que ans n'est que 0 au départ. La valeur de ans change à chaque comparaison.

Donc, disons que vous passez le tableau [1,2,5,4] à la fonction max , [1,2,5,4] comment il descendra:

  • 1 est-il plus grand que 0? Oui, alors ans devient 1.
  • Est-ce que 2 est plus grand que 1? Oui, alors ans devient 2.
  • Est-ce que 5 est plus grand que 2? Oui, alors ans devient 5.
  • Est-ce que 4 est plus grand que 5? Non, donc ans reste 5 et est renvoyé à l'utilisateur comme le plus grand nombre.

2 commentaires

Donc, vous dites que ans = arguments [I] fait partie de la boucle et donc ans ne change que lorsque la condition (if (arguments [I]> ans) est remplie? Si oui, cela a du sens. Merci beaucoup!


Oui, donc ans ne change que chaque fois qu'il devient comparé à une valeur supérieure à elle. Comme d'autres l'ont dit, il existe quelques cas d'utilisation de ce code qui entraîneront des erreurs ou des bogues, mais du point de vue de l'apprentissage, il fait le travail.



0
votes

La logique consiste à comparer deux nombres à la fois pour déterminer quel nombre est le plus grand. Le code que vous avez fourni ne fonctionnera que si tous les nombres de l'argument sont des entiers positifs.


0 commentaires