我正在尝试编写以下程序序列。
序列中的前三个数字是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);
}
}
}
但我无法将序列打印出来。
答案 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);
}
}