标记平方数的代码不起作用,这是为啥呢?
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
。然后逻辑应该取每个整数< 9
并将其平方。如果任何数字的平方等于myNumber
,则myNumber
是一个平方数(并返回true
),否则它不是并返回false
。
但是,当我尝试使用 9
时,我得到的输出是 false
,而它应该是 true
。
我的想法是,它以某种方式将数字与9
进行平方比较,但不是将9
与9
进行比较,而是将3
与9
进行比较,并且作为3 != 9
,它输出为false
。这是正确的吗?
我该如何解决?
(仅供参考,我已经看到了另一种方法,您可以将数字平方根并检查它是否为整数,但我想弄清楚为什么这种方法不起作用)。
【问题讨论】:
【参考方案1】:问题在于你的循环条件:
while (squareNumber <= number)
y += 1;
squareNumber = (y * y);
当y
达到3
并且squareNumber
变为9
(3 * 3) 时,您没有退出循环,因为9 <= 9
为真。因此,在循环的下一次迭代中,在结束循环之前将 4 * 4 分配给 squareNumber
,然后返回 false
。
将条件更改为while (squareNumber < number)
。
【讨论】:
以上是关于标记平方数的代码不起作用,这是为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥这种使用 PDO 计算 Mysql 行数的方法不起作用? [关闭]