2 votes

Le code pour marquer un nombre carré ne fonctionne pas, pourquoi ?

J'essaie d'apprendre Java et je dois créer un petit script qui vous dit si un nombre que vous avez sélectionné est un nombre carré ou non :

public class NumberShapes{
    public static void main(String[] args) {

        class Number {
            int number;

            public boolean isSquare(){
                int y = 1;
                int squareNumber = 1;

                while (squareNumber <= number) {
                    y += 1;
                    squareNumber = (y * y);
                }

                if (squareNumber == number) {
                    return true;
                }
                else {
                    return false;
                }
            }

        }
        Number myNumber = new Number();

        myNumber.number = 9;

        System.out.println("Is " + myNumber.number + " a square number?: " + myNumber.isSquare());

}
}

Supposons que vous choisissiez un nombre, dans ce cas-ci myNumber = 9 . La logique est alors supposée prendre chaque entier < 9 et le mettre au carré. Si un nombre est élevé au carré pour être égal à myNumber alors myNumber est un nombre carré (et renvoie true ) sinon il ne l'est pas et renvoie false .

Cependant, lorsque j'essaie avec 9 J'obtiens le résultat suivant false alors qu'il devrait l'être true .

Je pense que, d'une manière ou d'une autre, il s'agit d'une quadrature du cercle. 9 mais au lieu de comparer 9 avec 9 Il s'agit de comparer 3 avec 9 et en tant que 3 != 9 il donne comme résultat false . Est-ce exact ?

Comment le réparer ?

(Pour information, j'ai vu une alternative qui consiste à utiliser la racine carrée du nombre et à vérifier s'il s'agit d'un entier, mais j'aimerais comprendre pourquoi cette méthode ne fonctionne pas).

2voto

Eran Points 35360

Le problème se situe au niveau de la condition de votre boucle :

while (squareNumber <= number) {
    y += 1;
    squareNumber = (y * y);
}

Quand y atteint 3 y squareNumber devient 9 (3 * 3), vous ne sortez pas de la boucle, puisque 9 <= 9 est vrai. Par conséquent, lors de la prochaine itération de la boucle, vous affectez 4 * 4 à squareNumber avant de terminer la boucle, et vous renvoyez false .

Modifier la condition en while (squareNumber < number) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X