需要帮助 - 基本Java代码。(Fibonacci系列)

时间:2015-01-25 20:51:32

标签: java fibonacci

非常新的Java程序员,我正试图解决这个斐波那契问题。 (省略导入/类定义

    Scanner sc = new Scanner(System.in);
    System.out.print("Put in how many you want to input");
    numToPrint = sc.nextInt();
    sc.close();

    int current = 1;
    int last = 0;
    System.out.println(last);
    System.out.println(current);

    // This is the section I don't really understand.
    int lastlast;
    for (int c =2; c < numToPrint; c++){
        lastlast = last; //How does last variable change from 0 as assigned from above?
        last = current; // How does current variable change from 1? 
        current = lastlast + last;
        System.out.println(current);
        }
      }

2 个答案:

答案 0 :(得分:2)

由于OP是一个非常新的Java程序员,我认为它可能是 有助于提供一个小教程,就像初学者一样。

其他已做出回应的是正确的,但每个人都必须这样做 从某处开始。

行。你不理解的部分有几个整数变量, 这是计算机内存中存储位置的名称。 我会把它们画出来展示它们存储的东西(目前它们正在存放) 是空的):

  .---.      .---.  .---.  .---.  .---.
  |   |      |   |  |   |  |   |  |   |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

现在在Java中,新变量在程序时初始化为零 开始。 (所有语言都不是这样)。

我会在阅读(比如说)4和之后将值设置为他们持有的值 定位于评论:

//This is the section I don't really understand

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 1 |  | 0 |  | 0 |  | 0 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

现在,继续几行,我们开始循环:

for (int c =2; c < numToPrint; c++) {

我们可以看到c < numToPrinttrue所以我们继续:

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 1 |  | 0 |  | 0 |  | 2 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

接下来的两行被执行:

lastlast = last; last = current;

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 1 |  | 1 |  | 0 |  | 2 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

然后下一行是:

current = lastlast + last;

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 1 |  | 1 |  | 0 |  | 2 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

然后:System.out.println(current);

输出“1”

在循环的底部,我们将c增加一个:

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 1 |  | 1 |  | 0 |  | 3 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

然后回到顶部比较c < numToPrint仍然是  true,因此我们继续:

接下来的两行被执行:

lastlast = last; last = current;

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 1 |  | 1 |  | 1 |  | 3 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

然后下一行是:

current = lastlast + last;

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 2 |  | 1 |  | 1 |  | 3 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

然后:System.out.println(current);

输出“2”

在循环的底部,我们将c增加一个:

  .---.      .---.  .---.  .---.  .---.
  | 4 |      | 2 |  | 1 |  | 1 |  | 4 |
  '---'      '---'  '---'  '---'  '---'
numToPrint  current last  lastlast   c

然后回到顶部以比较现在的c < numToPrint false,所以程序结束。

希望这有助于您更多地理解代码? (由emacs图片编辑模式和冰镇啤酒提供!)

答案 1 :(得分:1)

“上一个变量如何从0开始从上面分配?” 因为您将当前值分配给

last = current;

“当前变量如何从1变化?” 因为您使用

将lastlast和last的总和分配给当前
current = lastlast + last;