【问题标题】:Another way to write loops that do something different only on first iteration?另一种编写仅在第一次迭代时执行不同操作的循环的方法?
【发布时间】:2020-02-20 22:56:22
【问题描述】:

简介:您好,这里是第一次发帖和初学者 Java 学习者,需要一些帮助“清理”我的代码。我已经成功打印了给定的输出,但想知道是否还有其他“更简单”的方法来完成这个练习。我在考虑递归,但真的不知道从哪里开始。

问题

  • 编写一个生成此输出的循环:

        1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377
    
  • 您的输出必须看起来与上面的示例完全一样——在一行中,逗号和空格如图所示。请注意,行尾没有逗号。

我尝试过的

我的解决方案涉及使用int 类型的三个变量:first_numsec_numthird_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);

【问题讨论】:

  • 搜索“斐波那契”
  • 你的解决方案对我来说似乎很好
  • 您只需要跟踪您当前的总和和之前的数字。这两者之和为您提供下一个数字(1+1=2、1+2=3、2+3=5、3+5=8 等)
  • 当我们谈到主题时——您应该遵循 Java 命名约定。变量名和方法名用驼峰命名法书写。所以没有下划线。

标签: java loops iteration


【解决方案1】:

你的代码有一个更简单的版本,但乍一看没有描述性

int first = 0;
int second = 1;

System.out.print(second);  
for (int i = 0; i <= 12; i++) {
    second = second + first;    // Now second equals to the sum of the first and old value of the second
    first = second - first;     // If subtract from second the value of first, we can get old value of the second

    System.out.print(", " + second);    
}

【讨论】:

  • 感谢您的回复。我试图找到一个不涉及必须在 for 语句中的 if 语句的解决方案。似乎我可以将前 2 个打印的数字放在 for 循环之外/之前,这样就可以处理第一次迭代,剩下的就可以轻松计算了。我无法理解您所做的“+=”和第二优先,但它显然给了我正确的输出。
  • 我添加了一些 cmets 来帮助你:)
【解决方案2】:

这样试试

int a, b, c, i, n;
n = 10;
a = b = 1;

System.out.print(a + ", " + b);

for (i = 1; i <= n - 2; i++) {
    c = a + b;
    System.out.print(", ");
    System.out.print(c);
    a = b;
    b = c;
}

来自HERE的代码

带有while循环:

int a, b, c, i, n, count;
n = 10;
a = b = count = 1;

System.out.print(a + ", " + b);

while(count <= n -2) {
    c = a + b;
    System.out.print(", ");
    System.out.print(c);
    a = b;
    b = c;

    count++;
}

【讨论】:

  • 感谢您的回复。这绝对看起来比我拥有的更好,因为它没有那么多检查要做。这也可以通过while循环来完成还是更难做到?
【解决方案3】:

不要编写递归函数,因为尝试使用递归求解斐波那契数列是dynamic programming 的众所周知的候选者。

你不必从 0 开始循环。实际上你可以从第三个数字开始 for 循环,因为你已经知道前 2 个数字都是 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);

【讨论】:

    【解决方案4】:
    for(int i = 0; i<=0;i++) {
        System.out.println("1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377");
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2016-06-19
    • 2019-12-19
    • 2021-03-07
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    相关资源
    最近更新 更多