所谓循环,就是转圈,一次又一次的周而复始。
Java语言里的循环语句可以在满足循环条件的情况下,反复执行一段代码,这段被重复执行的代码,被称为循环体语句。
当然,这种循环不是永远的,循环判断的条件需要在合适的时机被修改为false,结束循环,否则一直执行这种代码,会形成死循环。
循环结构语句分为三种:for语句、while循环、do while语句。
下面让我们一个一个来认识他们。
一、for循环语句结构 (一)、格式for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
注释:
①初始化语句:一条或者多条语句,这些语句完成一些初始化操作;
②判断条件语句:这是一个boolean类型的表达式,能决定是否执行循环体;
③循环体语句:就是电脑执行代码 “转圈” 的地方;
④控制条件语句:这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使循环在合适的时候结束。
①执行初始化语句;
②执行判断条件语句,看结果是true还是false;(true执行,false结束循环)
③执行循环体语句;
④执行控制条件语句;
⑤回到第②条继续。
例
请输出10次“hello world”
谁的答案是 打印10次“System.out.println(“hello world”);”,我就给他一板砖……
━((′д`)爻(′д`))━!!!
当然这也是一种方法,但代码重复率太高,作为一个明日之星的程序员,要避免这种很low的写法。既然我们现在已经学习了循环语句,就要用新方法来改进。
写代码之前先分析一下:
设置一个int类型的变量x(因为10次这个数包含在int类型里),那么重复10次的话,x就应该<=10同时又>0,(因为是从1开始,重复输出10次),到了这一步,初始化语句和判断条件语句就有了。
接下来是循环体语句,老生常谈的hello world,还缺一个控制条件语句。
我先卖个关子,大家自己想一想应该是个啥。
(* ̄(oo) ̄)
public class demon {
public static void main(String[] args) {
for(int x=1; x<=10; x++){
System.out.println("hello world");
}
}
}
hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world Process finished with exit code 0
怎么样,你猜对了吗?
也就是说,在这个程序里先设置一个int x=1的初始化条件(当然也可以从0开始),然后一个boolean类型的表达式,判断一下是否执行循环体,如果触发条件,则代码开始转圈,即输出hello world。
但输出一次hello world后(循环一次),下一次循环条件判断之前,触发控制条件语句,控制循环中的变量在合适时候结束。
哎呦妈耶,累死,不知道我是否说明白了,不明白也请多包涵吧。
(三)经典案例例1
请输出数据1-10;
我们就可以写成:
public class demon {
public static void main(String[] args) {
for(int x=1; x<=10; x++){
System.out.println(x);
}
}
}
1 2 3 4 5 6 7 8 9 10 Process finished with exit code 0
怎么样,是不是感觉还可以……
如果题目改为:请输出数据10-1,你会做吗?
例2
请求出1-10之间的数据之和
当我们写任何代码之前,如果第一眼看不出答案,就先分析。
1-10之间的和=
0+1=1;
1+2=3;
3+3=6;
6+4=10;
10+5=15;
15+6=21;
21+7=28;
28+8=36;
36+9=45;
45+10=55
请各位仔细观察一下这组等式:
前一个算式的和,都会跟一个数相加,而这个数是从1-10逐个递加的规律。从这里我们可知,在接下来的代码里需要两个变量,即前一个算式的和,可以设为int x;及与其相加的加数,可以设为int y。
那么代码就可以写成这样:
public class demon {
public static void main(String[] args) {
int x=0;
for(int y=1; y<=10; y++){
x+=y;
}
System.out.println(x);
}
}
55 Process finished with exit code 0
例3
请计算出1-100之间,所有偶数相加的和
温馨提示:什么是偶数?
public class demon {
public static void main(String[] args) {
int x=0;
for(int y=1; y<=100; y++){
if(y%2==0){
x+=y;
}
}
System.out.println(x);
}
}
2550 Process finished with exit code 0
如果一个数能被2除尽,即为偶数。
请问这道题是否还有别的写法?
比如下面这样:
public class demon {
public static void main(String[] args) {
int x=0;
for(int y=0; y<=100; y+=2){
x+=y;
}
System.out.println(x);
}
}
如果求1-100之间所有奇数之和呢?
请你自己写一写,把答案贴在评论区。
例4
求5的阶乘
做这道题前,先搞清楚什么叫“阶乘”。如果你一早就知道,请自动屏蔽下面的文字。
所谓阶乘,就是从1到n的连续自然数相乘的积。0的阶乘是1,自然数n的阶乘写作n!。
任何大于等于1 的自然数n 阶乘表示方法:
n!=1* 2* 3* 4*……*(n-1)n
或
n!=n*(n-1)!
弄清楚了定义和公式以后,5!=1* 2* 3* 4* 5,这道题的代码就可以这样写:
public class demon {
public static void main(String[] args) {
int factorial=1;
for(int x=1; x<=5; x++){
factorial*=x;
}
System.out.println("1-5的阶乘:"+factorial);
}
}
1-5的阶乘:120 Process finished with exit code 0
注:factorial 阶乘
例5
请输出所有的“水仙花数”
水仙花人见人爱,但“水仙花数”估计很多人跟我一样是第一次听说。
下面借用百度百科的词条解释,给大家科普一下:
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如: 153=1^3 +5^3+ 3^3
现在知道题目意思了,让我们来着手分析一下:
①、三位数,首先限定了该数据的取值范围,即100
②、关键是怎么得到这个三位数百位、十位、各位上的数据,不能凭空出现,也非一成不变。
拿153这个数字举例:
各位上的数字:可以通过153对10取余得到,即153%10=3。
十位上的数字:可以通过让153先除以10(变成十位数),再对10取余得到,即153/10%10=5。
百位上的数字:可以通过让153除以两次10(变成个位数),再对10取余得到,即153/10/10%10=1。
③、如果让( ge * ge * ge)+(shi * shi * shi)+(bai * bai * bai)=x,那么就说明它是水仙花数,可以输出到控制台。
所以这道题的代码就可以写成:
public class demon {
public static void main(String[] args) {
for (int x = 100; x < 1000; x++) {
int ge = x % 10;
int shi = x / 10 % 10;
int bai = x / 10 / 10 % 10;
if (x == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
System.out.println("水仙花数为:" + x);
}
}
}
}
水仙花数为:153 水仙花数为:370 水仙花数为:371 水仙花数为:407 Process finished with exit code 0
例6
请统计水仙花数一共有多少个
温馨提示两点:
①、题目要求看清楚;
②、定义统计变量,初始化值是0。
公布答案:
public class demon {
public static void main(String[] args) {
int count=0;
for (int x = 100; x < 1000; x++) {
int ge = x % 10;
int shi = x / 10 % 10;
int bai = x / 10 / 10 % 10;
if (x == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
//如果满足就计数
count++;
}
}
System.out.println("水仙花数个数为:" + count);
}
}
水仙花数个数为:4 Process finished with exit code 0
例7
请统计1-1000之间,同时满足如下条件的数据有几个?
对3整除余2
对5整除余3
对7整除余2
分析过程请大家自己写,我直接公布答案:
public class demon {
public static void main(String[] args) {
int count=0;
for (int x = 1; x < 1000; x++) {
if (x%3==2 && x%5==3 && x%7==2) {
count++;
}
}
System.out.println("满足条件的数据个数为:" + count);
}
}
满足条件的数据个数为:10 Process finished with exit code 0
例8
请输出满足以下条件的五位数
个位=万位
十位=千位
个位+十位+千位+万位=百位
我能不能把答案也省略呀,写代码好累的说
ublic class demon {
public static void main(String[] args) {
for (int x =1000; x < 10000; x++) {
int ge=x%10;
int shi=x/10%10;
int bai=x/10/10%10;
int qian=x/10/10/10%10;
int wan=x/10/10/10/10%10;
if (ge==wan && shi==qian && ge+shi+qian+wan==bai) {
System.out.println("满足条件的数据为:" + x);
}
}
}
}
满足条件的数据为:1210 满足条件的数据为:2420 满足条件的数据为:3630 满足条件的数据为:4840 Process finished with exit code 0
部分图片来自网络,侵权立删



