在我们Java中有三种比较常用的循环结构
它们是for循环,while循环,do...while循环。
总结它们的区别:
①语法:
②执行顺序:
while 循环:先判断,再执行
do-while循环:先执行,再判断
for循环:先判断,再执行
③适用情况:
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while或do-while循环
例1: 猴子吃桃子问题:猴子第一天摘下若干套子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个,以后每天都吃前一天剩下的一半多一个。到第10天的时候再想吃桃子时,只剩下一个套子。求第一天摘了多少个套子。
分析:在这个题目中我们要抓住关键逻辑 我们可以从最后一天的那个一个桃子入手
前一天的桃子的数目时后一天桃子的数目+1 再乘2 也就是第10天是1个 第9天则是:(1+1)*2个
代码如下:
public static void main(String[] args) {
int a =1 ;
int day = 10;
while(day>1){
a=(a+1)*2;
day--;
}
System.out.println("吃了"+a+"个");
}
结果为:1534
例2:有1020个西瓜,第一天卖掉总数的一半后又多卖掉两个,以后每天卖剩下的一半多两个,问几天可以卖完。
分析:本题和第一题有些许类似,不过细看也略有不同,但思想方法是差不多的。
注:我们需要一个变量来标记天数。
public static void main(String[] args) {
int num = 1020;
int day=0;
do{
num=num-num/2-2;
day++;
}while (num>0);
System.out.println(day);
}
结果是 8
例3:兔生兔问题,我们规定一对兔子从出生后第三个月开始可以生一队兔子。假如一年内没有发生死亡,设一年后(12个月)能繁殖为多少对?
分析:有过编程经验或者有学习过C等语言的老铁,看到这个题目肯定会想到斐波那契数列。
在此题目中确实是有类似斐波那契数列的逻辑关系,这里作者给入门的童鞋总结出兔子规律的数列:1,1,2,3,5,8,13,21
我们可以看到从第三项开始的值就是前两项的值。要完成这个逻辑操作我们可以通过一个中间值去完成。
public static void main(String[] args) {
int a=1;
int b=1;
int temp;
for(int i=2;i<12;i++){
temp = b;
b=a+b;
a=temp;
}
System.out.println(b);
}
结果为:144
例4:计算1+2-3+4-5+6-7+......+100的值
分析:此题可以清晰的分为奇数部分和偶数部分
奇数从3 开始就变为负值
而偶数就一直是正值 总结出我们可以从2开始循环 然后初始值定为1
public static void main(String[] args) {
int sum=1;
for(int i = 2;i<=100;i++){
if(i%2==0){
sum+=i;
}else {
sum-=i;
}
}
System.out.println(sum);
}
结果为 52