已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
两年前关闭了。
Improve this question
我目前正在做一些hyperskill教育,我不明白为什么这段代码会无缘无故地跳过一些数字。java扫描仪的输入是50,所以基本上N=50
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// put your code here
int N = scanner.nextInt();
int x = 1;
int Square = x * x;
while (x * x <= N) {
Square = x * x;
System.out.println(Square);
x += x;
}
}
}
4条答案
按热度按时间ldioqlga1#
因为...密码就是这么做的。
x
在第一循环中为1,意味着,平方为1*1
,其为1。然后,将x与自身相加(
x += x
),在下一个循环中,x为2,平方为4。然后,你再把x加上它自己,现在x是4,它的平方是16。
我不知道你为什么希望从这得到9分。
如果你用
x += 1
(或者更短的x++
)替换x += x
,你会得到1、4、9、16、25、36、49。注:一般来说,要想知道代码为什么不工作/不做你想做的事情,调试它。花一些时间学习如何使用调试器,或者如果你不能做到这一点,使用大量的
System.out.println
语句进行低效的调试。"在头脑中"遍历代码,成为计算机,在每一步计算出发生了什么以及变量的值将是什么。然后将你认为发生的与实际发生的进行比较(通过检查调试器,或者打印各种变量的值)。当你认为发生的与实际发生的不匹配时?你发现了一个bug。在这种情况下,这会让你达到目的。qncylg1j2#
欢迎来到堆栈溢出!
应该是
相反-所以你得到了下一个数字。在x += x的位置上,你得到x为1,2,4,然后8...而8x8 = 64在你的when条件之外:-)
bpsygsoo3#
问题就出在那条线上
x += x;
你把x加到x上,所以你把x乘以2
你必须把x加1。
因此,将此线
x += x;
更改为x += 1;
up9lanfz4#
加入一些简单的print语句可能会有所帮助。
对于N = 50,图纸