-1

我正在尝试编写以下程序序列。

序列中的前三个数字是 1、1、2。序列中的每个其他数字都是前三个数字的总和。程序应提示用户输入限制;当序列中的当前数字大于或等于此限制时,程序将停止。

例如,如果我将限制写为 123,我应该得到:1 1 2 4 7 13 24 44 81

我尝试了以下方法:

import jpb.*;

public class XiaolinSequence {

    public static void main(String[] args) {
        SimpleIO.prompt("Enter a limit on the largest number to be displayed:");
        String userInput = SimpleIO.readLine();
        int counter = Integer.parseInt(userInput);

        int older = 1;
        int old = 1;
        int current = 2;
        while (current < counter) {
            int nextNumber = older + old + current;
            older = old;
            old = current;
            current = nextNumber;
            System.out.println(nextNumber);
        }
    }

}

但我无法让序列打印出来。

4

2 回答 2

2

你需要改变你打印东西的方式。

永远不会打印缺少1 1 2的内容,因为它们永远不会存储在nextnumber您曾经打印过的唯一变量中。

你会得到一个额外的149,因为你在没有检查的情况下打印nextnumber它的值大于限制。

对我来说,以下代码的输出1 1 2 4 7 13 24 44 81都在新行上。

int counter=123; // replaced IO code so I did not have to download the jar.
int older=1;
int old =1;
int current=2;

System.out.println(older);  // prints the first 1
System.out.println(old);  // prints the second 1
System.out.println(current);  // prints the 2

while(current<counter){
    int nextnumber=older+old+current;
    older=old;
    old=current;
    current=nextnumber;
    if(nextnumber <= counter)       
    {
        System.out.println(nextnumber);
    }
}
于 2013-10-04T21:05:37.913 回答
2

好的,因为人们为你的 抨击我SimpleIO,使用任何你想阅读的输入。相反,我将指出您的代码中的一个逻辑缺陷。

要使程序正常运行,您需要打印出来older而不是current,如下所示:

while (older < counter) 
{
    System.out.println(older);

    final int nextnumber = older + old + current;
    older = old;
    old = current;
    current = nextnumber;
}

它工作得很好。


中没有这样的SimpleIO东西java.lang

您可能想替换String userInput = SimpleIO.readLine()

System.out.print("Enter limit: "); 
Scanner in = new Scanner(System.in); 
String userInput = in.next(); 

然后代码将起作用。

哦,顺便说一句,不要忘记1 1 2在开始循环之前打印出来。

于 2013-10-04T20:55:29.247 回答