Java 写循环的另一种方法,只在第一次迭代时做一些不同的事情?

Java 写循环的另一种方法,只在第一次迭代时做一些不同的事情?,java,loops,iteration,Java,Loops,Iteration,简介:您好,这里是第一次张贴海报和java初学者,希望您能帮助“清理”我的代码。我已经成功地打印了给定的输出,但我想知道是否还有其他“更简单”的方法来进行此练习。我在考虑递归,但真的不知道从哪里开始 问题 编写生成此输出的循环: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 您的输出必须与上面的示例完全相同–在一行上,使用逗号和空格,如图所示。请注意,行的末尾没有逗号 我试过的 我的解决方案涉及使用三个类型为int的变量:

简介:您好,这里是第一次张贴海报和java初学者,希望您能帮助“清理”我的代码。我已经成功地打印了给定的输出,但我想知道是否还有其他“更简单”的方法来进行此练习。我在考虑递归,但真的不知道从哪里开始

问题
  • 编写生成此输出的循环:

        1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377
    
  • 您的输出必须与上面的示例完全相同–在一行上,使用逗号和空格,如图所示。请注意,行的末尾没有逗号

我试过的 我的解决方案涉及使用三个类型为
int
的变量:
first_num
sec_num
third_num
,以及for循环和if语句

// declare and initialize int first, sec, and sum
int first_num = 1;
int sec_num = 1;
int sum = 0;

//2
for (int i = 0; i <= 10;i++) {
    sum = first_num + sec_num;
    if (i == 0) {
        System.out.print(first_num + ", " + sec_num + ", ");
    }
    System.out.print(sum + ", ");
    first_num = sec_num;
    sec_num = sum;
}
System.out.print(sum);
//首先声明并初始化int、sec和sum
int first_num=1;
int secu_num=1;
整数和=0;
//2

对于(inti=0;i有一个更简单的代码版本,但乍一看它不是描述性的

int first=0;
int秒=1;
系统输出打印(秒);
对于(inti=0;i像这样尝试

inta、b、c、i、n;
n=10;
a=b=1;
系统输出打印(a+“,”+b);

对于(i=1;i,您也可以按如下方式执行:

public class Main {
    public static void main(String[] args) {
        int i;
        for (i = 1; i <= 13; i++) {
            System.out.print(fibonacci(i) + ", ");
        }
        System.out.print(fibonacci(i));
    }

    static int fibonacci(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        return fibonacci(n - 2) + fibonacci(n - 1);
    }
}
或者,

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        fibonacci(1, 1, 377, sb);
        System.out.println(sb.substring(0, sb.lastIndexOf(",")));
    }

    static void fibonacci(int n1, int n2, int limit, StringBuilder sb) {
        if (n1 > limit) {
            return;
        }
        sb.append(n1).append(", ");
        fibonacci(n2, n1 + n2, limit, sb);
    }
}
输出:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377

for(int i=0;i不要编写递归函数,因为使用递归求解斐波那契序列是一个众所周知的候选函数

您不必从0开始循环。事实上,您可以从第三个数字开始for循环,因为您已经知道前两个数字都是1

代码如下:

int first_num = 1, int sec_num = 1;
int index = 2; // since you want to start generating numbers from index 3
int endIndex = 15; // total numbers in your list
int nextNum = 0;
while(index++ < endIndex){
    nextNum = first_num + sec_num;
    System.out.print(nextNum + ", ");
    first_num = sec_num;
    sec_num = nextNum;
}
System.out.print(nextNum);

int first_num=1,int secu_num=1;
int index=2;//因为您想从索引3开始生成数字
int endIndex=15;//列表中的总数
int nextNum=0;
while(index++
search for“fibonacci”我觉得你的解决方案很好,你只需要跟踪你的当前和上一个数字。这两个数字的和会给你下一个数字(1+1=2,1+2=3,2+3=5,3+5=8,等等)在我们讨论这个主题时,您应该遵循Java命名约定。变量和方法名称都是用camelCase编写的。因此没有下划线。感谢您的回答。我试图找到一个解决方案,它不涉及必须位于for语句内部的if语句。看起来我可以输出前2个打印的数字在for循环之前,这将处理第一次迭代,剩下的迭代将很容易计算。我很难理解“+=”和您所做的第二次优先,但它显然为我提供了正确的输出。我添加了一些注释以帮助您:)谢谢你的回复。这看起来肯定比我的好,因为它没有那么多的检查要做。这也可以通过一个while循环来完成,还是更难完成?嘿嘿…聪明;-)哦!!忘了引号了!@JAMESLEE-而OP确实要求“更简单”解决方案。@HotLicks您介意帮我解决这个问题吗-->
int first_num = 1, int sec_num = 1;
int index = 2; // since you want to start generating numbers from index 3
int endIndex = 15; // total numbers in your list
int nextNum = 0;
while(index++ < endIndex){
    nextNum = first_num + sec_num;
    System.out.print(nextNum + ", ");
    first_num = sec_num;
    sec_num = nextNum;
}
System.out.print(nextNum);