2013-10-04 79 views
-1

我正在尝试编写以下程序序列。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); 
     } 
    } 

} 

,但我有麻烦的顺序打印出来。

+0

current

+3

有什么问题? – ppeterka

+0

当我在说一个柜台说123我没有得到正确的输出我需要 –

回答

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); 
    } 
} 
+2

起初,这也是我最初的解决方案。但是有一个更简单的方法。只需在循环内输出'older'即可。 – GGrec

+0

感谢科林是你的代码工作,并且是excellente –

+0

@GCrec,我同意,这个代码可以改进。我只是想说明从OP到解决方案的步骤。 –

2

好吧,既然人们让我为你的SimpleIO,使用任何你想要读取输入。相反,我要指出你的代码中存在逻辑缺陷。

对于程序能够正常工作,你需要打印出older,而不是current,就像这样:

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

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

它工作得很好。


有没有这样的事情在 java.lang SimpleIO

您可能希望与

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

那么代码将工作,以取代String userInput = SimpleIO.readLine()

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

+1

我认为'SimpleIO'在'jpb。*'中...... – iamnotmaynard

+2

https://github.com/cesardv /Eulers/blob/master/2/jpb/SimpleIO.java –

+0

Fiiiiiine。编辑答案。 – GGrec