为什么我的 for 循环只返回我期望的一半元素?

Why does my for loop return only half the elements I expect it to?

提问人:Sam Hawthorne 提问时间:9/21/2022 更新时间:9/21/2022 访问量:127

问:

我想接收用户对斐波那契数列的 n 个元素的输入。扫描仪和计算本身似乎工作正常 - 成功抓取输入并计算序列。它甚至能够正确地取消负值的输入资格。但是,它实际上并没有返回“n”元素。奇怪的是,我注意到循环始终如一地返回所请求元素的一半,尽管顺序正确。如果 n = 20,则返回前 10 个数字。

代码如下:

public class fibonacci_input {

    public static void main(String[] args) {
// TODO Auto-generated method stub

        Scanner myObj = new Scanner(System.in);
        int num1 = 0;
        int num2 = 1;
        int n;
            System.out.println("How many elements would you like in your Fibonacci sequence?");
            n = myObj.nextInt();
                if (n < 0)
                    System.out.println("Positive numbers only!");
                else 
                    System.out.println("Your Fibonacci sequence with " + n + " elements is:");
                    { for (int i = 1; i <= n; ++i)
                        { 
                            System.out.print(num1 + " ");
                            int num3 = num1 + num2;
                            num1 = num2;
                            num2 = num3;
                            ++i;
                        }

                    }
            }
}

我很难想象问题可能是什么。我最初认为这可能是测试条件语句的问题,但在线类似的(工作)解决方案似乎它们的循环格式几乎相同。我的变量声明是否有问题?我已经尝试了多次更改都无济于事,因此将不胜感激另一双眼睛:)

for-loop java.util.scanner 斐波那契

评论

3赞 Dave Newton 9/21/2022
你把“i”递增两次。
0赞 Thomas 9/21/2022
看身体和身体。这基本上跳过了每个第二个元素。顺便说一句,这种情况可以通过使用调试器逐步执行代码来轻松解决,因此您可能希望尽早获得该有用的技能。for (int i = 1; i <= n; ++i)++i;
0赞 Federico klez Culloca 9/21/2022
循环后的大括号是怎么回事?你是不是把它放错了地方?forelseSystem.out.println
0赞 Sam Hawthorne 9/21/2022
这奏效了!谢谢你们的快速回复 - 你们让这个新手的一天变得更好:)今后我绝对会使用调试器。应该想到这一点,所以我感谢您的耐心等待。Federico,我想做的是确保句子始终打印在循环之前,然后是循环返回的值。取下它们后,似乎不需要额外的牙套。好渔获,你帮我清理了一下代码!

答:

0赞 Robson Moreira 9/21/2022 #1

您可以删除代码中的第二个语句,该语句使 for 循环按预期运行一半,因为该变量在每次迭代中都会递增两次i++;i

public class fibonacci_input {

    public static void main(String[] args) {

        Scanner myObj = new Scanner(System.in);
        int num1 = 0;
        int num2 = 1;
        int n;
            System.out.println("How many elements would you like in your Fibonacci sequence?");
            n = myObj.nextInt();
                if (n < 0)
                    System.out.println("Positive numbers only!");
                else 
                    System.out.println("Your Fibonacci sequence with " + n + " elements is:");
                    { for (int i = 1; i <= n; ++i)
                        { 
                            System.out.print(num1 + " ");
                            int num3 = num1 + num2;
                            num1 = num2;
                            num2 = num3;
                            //++i;
                        }

                    }
            }
}