有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    好吧,既然有人因为你的SimpleIO而抨击我,那就用你想读的任何东西吧。相反,我要指出代码中的一个逻辑缺陷

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

    while (older < counter) 
    {
        System.out.println(older);
    
        final int nextnumber = older + old + current;
        older = old;
        old = current;
        current = nextnumber;
    }
    

    它很好用


    在{}中没有{}这样的东西

    您可能希望将String userInput = SimpleIO.readLine()替换为

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

    然后代码就可以工作了

    哦,顺便说一下,在开始循环之前,别忘了打印出1 1 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);
        }
    }