非常新的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);
}
}
答案 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 < numToPrint
是true
所以我们继续:
.---. .---. .---. .---. .---. | 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;