Java:初学者问题:为什么我不能从这个代码中得到数字(1,4,9,16,25,36,49)[已关闭]

cig3rfwq  于 2023-03-06  发布在  Java
关注(0)|答案(4)|浏览(156)

已关闭。此问题需要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;
        } 
    }
}
ldioqlga

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。在这种情况下,这会让你达到目的。

qncylg1j

qncylg1j2#

欢迎来到堆栈溢出!

x += x;

应该是

x += 1;

相反-所以你得到了下一个数字。在x += x的位置上,你得到x为1,2,4,然后8...而8x8 = 64在你的when条件之外:-)

bpsygsoo

bpsygsoo3#

问题就出在那条线上
x += x;
你把x加到x上,所以你把x乘以2

1) x=1 -> x*x=1
2) x=2 -> x*x=4
2) x=4 -> x*x=16
2) x=8 -> x*x=64

你必须把x加1。
因此,将此线x += x;更改为x += 1;

up9lanfz

up9lanfz4#

加入一些简单的print语句可能会有所帮助。

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;
    System.out.println("adding x to x to get " + x);
    System.out.println("x * x will now be " + (x*x));
}

对于N = 50,图纸

1
adding x to x to get 2
x * x will now be 4
4
adding x to x to get 4
x * x will now be 16
16
adding x to x to get 8
x * x will now be 64

相关问题