标记平方数的代码不起作用,这是为啥呢?

Posted

技术标签:

【中文标题】标记平方数的代码不起作用,这是为啥呢?【英文标题】:Code to flag a square number is not working, why is this?标记平方数的代码不起作用,这是为什么呢? 【发布时间】:2020-09-19 13:00:31 【问题描述】:

我正在尝试学习 Java,并且必须创建一个小脚本来告诉您您选择的数字是否为平方数:

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());



假设您选择了一个数字,在本例中为 myNumber = 9。然后逻辑应该取每个整数&lt; 9 并将其平方。如果任何数字的平方等于myNumber,则myNumber 是一个平方数(并返回true),否则它不是并返回false

但是,当我尝试使用 9 时,我得到的输出是 false,而它应该是 true

我的想法是,它以某种方式将数字与9 进行平方比较,但不是将99 进行比较,而是将39 进行比较,并且作为3 != 9,它输出为false。这是正确的吗?

我该如何解决?

(仅供参考,我已经看到了另一种方法,您可以将数字平方根并检查它是否为整数,但我想弄清楚为什么这种方法不起作用)。

【问题讨论】:

【参考方案1】:

问题在于你的循环条件:

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

y 达到3 并且squareNumber 变为9 (3 * 3) 时,您没有退出循环,因为9 &lt;= 9 为真。因此,在循环的下一次迭代中,在结束循环之前将 4 * 4 分配给 squareNumber,然后返回 false

将条件更改为while (squareNumber &lt; number)

【讨论】:

以上是关于标记平方数的代码不起作用,这是为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这种使用 PDO 计算 Mysql 行数的方法不起作用? [关闭]

Eclipse中的数字平方不起作用

为啥标记为@IBInspectable 的属性不起作用?

为啥边界半径对图像不起作用?

模态在我的网络服务器中不起作用,但在 localhost 中起作用。这是为啥?

为啥ANSI颜色转义码不起作用[重复]