Java程序涉及

时间:2013-10-04 20:46:17

标签: java

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

序列中的前三个数字是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);
        }
    }

}

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
    }
}