目录
FOR循环
-
循环结构: 在程序当中总有一些需要反复/重复执行的代码,假设没有循环结构,那么这段需要重复执行的代码就需要重复编写。代码无法得到重复使用。所以多数编程语言都是支持循环结构的。将来把需要反复执行的代码片段放到“循环体“,再联合”计数器“,共同控制这段需要反复执行的代码。
-
基本上所有的编程语言支持的循环包括三种:
- for循环
- while
- do . . .while
-
当前示例主要讲解for循环,for循环的语法结构:
语法结构:
for( 初始化表达式 ; 布尔表达式 ; 更新表达式 ){ //这里放的是需要重复执行的代码片段【循环体:由java语句构成】 }
-
for循环的执行过程/执行原理
-
初始化表达式、布尔表达式、更新表达式都不是必须的!【但两个分号是必须的】
-
初始化表达式最先执行,并且在整个for循环中只执行一次。
-
布尔表达式必须是true/false,不能是其他值。
-
for的执行过程:
*先执行初始化表达式,并且该表达式只执行一次 *判断布尔表达式的结果是true还是false ——布尔表达式true *执行循环体 *执行更新表达式 *判断布尔表达式是true还是false ——布尔表达式true *执行循环体 *执行更新表达式 *判断布尔表达式是true还是false ——布尔表达式true *执行循环体 *执行更新表达式 *判断布尔表达式true还是false ·············· ——布尔表达式false *循环结束 ——布尔表达式false *循环结束 ——布尔表达式false *循环结束
-
-
循环输出1~10
public class ForText01 { public static void main(String[] args){ /* //输出数字1-10 System.out.println("1"); System.out.println("2"); System.out.println("3"); System.out.println("4"); System.out.println("5"); System.out.println("6"); System.out.println("7"); System.out.println("8"); System.out.println("9"); System.out.println("10"); */ //使用循环结构来代替以上所有反复执行的代码块。 //使用循环语句可以让代码量变少 //将以上代码修改为for循环 for(int i= 1 ; i <= 10 ; i= i + 1){ System.out.println(i); } System.out.println("============================================"); for(int i= 1 ; i <=10 ;i += 1){ System.out.println(i); } System.out.println("============================================"); for(int i= 1 ; i <=10 ;i ++) { System.out.println(i); } System.out.println("============================================"); for(int i= 1 ; i <=10 ;++ i ) { System.out.println(i); } //死循环 for(;;) { System.out.println("死循环"); } } }
-
for循环中i变量的作用域
public class ForText02 { public static void main(String[] args){ //以下的for循环当中“i”变量的作用域是仅限于当前for循环内部使用 for(int i=0;i<10;i++){ System.out.println("i--->"+i); } //以下的for循环当中“i”变量的作用域是仅限于当前for循环内部使用 for(int i=0;i<=10;i++){ System.out.println("i--->>"+i); } //这个变量可以在main方法的作用域中访问吗? //System.out.println("i="+i);//编译错误,无法访问 //main方法作用于当中的i变量,只要main方法没有结束,这里的i就能用。 int i= 0; for(;i<10;i++){ System.out.println("i--->>>"+i); }//这个循环语句中,执行到i=9,9+1=10时,循环语句结束,不输出i=10,但是已经运算了,所以以下的i输出为10 //这里可以访问main方法作用域当中的i变量 System.out.println("i--->>>==="+i);//10 int j; for(j=0;j<10;j++){ System.out.println("j--="+j); } System.out.println(j); } }
-
for循环的不同写法
public class ForText03 { public static void main(String[] args){ for(int i=1;i<=10;i+=2){ System.out.println("i-->"+i);//1 3 5 7 9 } for(int i=0;i<=10;i+=2){ System.out.println("i-->>"+i);//0 2 4 6 8 10 } for(int i=10;i>0;i--){ System.out.println("i-->>>"+i);//10 9 8 7 6 5 4 3 2 1 } for(int i=100;i>=50;i -=10){ System.out.println("i>>>"+i);//100 90 80 70 60 50 } for(int i=0; i<10 ;){ System.out.println("计数器"+i);//0 1 2 3 4 5 6 7 8 9 i++;//for执行顺序——》初始化表达式——>布尔表达式——>循环体——>更新表达式——>布尔——>循环体 //所以更新表达式放在这里也可以,不影响结果输出 } //以下三行代码与以上相同 for(int i=0; i<10 ; i++) { System.out.println("计数器" + i);//0 1 2 3 4 5 6 7 8 9 } for (int i=0;i<10;){ i ++;//当i=9时小于10,继续执行+1=10输出,10=10,循环结束 System.out.println("计数器》》"+i);//1 2 3 4 5 6 7 8 9 10 } } }
-
for循环求和
/* 在前一个程序的基础山,计算1~100所有奇数的和 1 + 3 + 5 + 7 +9 + ······ + 99 运算符 +=就是专门完成追加的 */ public class ForText05 { public static void main(String[] args){ //定义一个变量【盒子】,初始值为0 int sum= 0; for(int i=1 ; i<100 ;i+=2){ //i一定是奇数 //累计追加 //sum存储的最终求和的结果 //不能每一次执行到这里,都把结果归为0 //定义sum不能放在这,因为这里是循环体 //int sum= 0; 所以这一变量要定义在for循环外 sum += i;//sum=(int)(sum+i); //输出语句放到这里表示每循环一次则输出一个数据 //即没两个数相加就显示一次 //System.out.println("sum = "+sum); } //以上for循环结束之后,最终输出求和的结果 System.out.println("sum ="+sum); System.out.println("======================================================="); //第二种方法: //sum归零 sum =0; for(int i=1;i<=100;i++){ if(i % 2 !=0){ sum +=i; } } System.out.println("sum ="+sum); } }
-
for循环嵌套for循环
public class ForText06 { public static void main(String[] args){ for(int i=1;i<=10; i++){//共循环10次 //循环体中可以编写其他的控制语句 //控制语句可以嵌套使用 //控制语句可以是:if、if..else、switch、for、while、do..while /* if(){ for(){ while(){ if(){ for(){ } } } } } */ //不要想太多,即使循环体中是一个for循环,不要将这个for特殊化,它也只是一个普通的for循环 //只不过是一段符合java语法的代码 //内层循环,内层循环中的变量名和外层循环中的变量名不能重名。 //for(int i=10;;){} //System.out.println("i--->"+i); //这里是循环体,无论这个循环体中编写了什么样的代码,这对代码也需要执行10遍。 for(int j=0;j<3;j++){ System.out.println("J--"+j); } } for(int i=1;i<=10;i++){//循环10次,就是10个三次0 1 2,就是30个0 1 2 for(int j=0;j<3;j++){//循环三次,就是三个0 1 2 for(int k=0; k<3;k++){//循环三次 0 1 2 System.out.println("K------------"+k); } } } } }
-
for循环
public class ForText07 { public static void main(String[] args){ // for(int i=0;i<10;i++){//循环10次 // // System.out.println("Begin"); // //这里的代码片段执行10次 // for(int j=0;j<1;j++){//执行1次,输出0 // System.out.println("j-->"+j); // // } // } for(int i=1;i<=5;i++){//执行5次,每一次执行,内层的循环都执行一次 System.out.println("开始"); for(int j=1;j<=5;j++){//执行5次 System.out.println(i*j); } System.out.println("结束"); } /* 开始 1 2 3 4 5 结束 开始 2 4 6 8 10 结束 开始 3 6 9 12 15 结束 开始 4 8 12 16 20 结束 开始 5 10 15 20 25 结束 */ } }
练习
-
九九乘法表
/* 使用for循环输出九九乘法表 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 2*4=16 ··························· ······································· 9*1=9··············································9*9=81 */ public class ForText08 { public static void main(String[] args){ for(int i=1;i<=9;i++){//外层9次 for(int j=1;j<=i;j++){//内层 //i是1时,=j, 输出1*1=1 换行 j++ =2>1,结束内层循环 //i=2了, j<i 输出2*1=2,j++运算完=2,i=j 输出2*2=4 换行 j++ =3>2 结束内层循环 //i=3了, j<i 输出3*1=3 j++运算完=2 继续j++ --> 输出3*2=6 继续j++ -->输出3*3=9 i=j 换行 j++ =4>3 结束内层循环 System.out.print(i+"*"+j+"="+i*j+"\t");//这里是为了美观,在每一句之后加一个制表符 if(i==j){//这里是为了美观,加一个if语句,在每换一行之后加一个换行符或者放在外层循环中 System.out.println("\n"); } } } for(int i=1;i<=9;i++){ //i是行号 //System.out.println(i); //循环体中的程序主要任务是什么? //处理当前行,将当前行中所有的项目全部输出 for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+i*j+"\t"); } System.out.println("\n"); } } }
-
需求:编写for循环找出1~100中所有的素数
/* 素数:又被称为质数,能够被1和自身整除,不能被其他数字整除的数字成为素数。 也就是说判断条件应该是:除的数只要不包含1和本身,只要有有一个数能被整除,就不是素数 不能是:只要没有可以整除的数,就是质数, 这个是错的i%j!=0 - 举例15 15/4=3···余3,15不能整除4,但是可以整除3和5,这里余数不为0,但15也不是质数 - 所以用这个条件判断是否为质数是错的 能整除1,i%1==0 任何数都能整除1, 自身整除 i%i==0 只能被自己整除, */ public class ForText09 { public static void main(String[] args){ System.out.print("100以内的质数:"); for(int i=2;i <= 100 ; i++){//判断1~100中每一个数是不是质数,一个数判断一次,就是100次 boolean flag=true; for(int j = 2; j < i ; j++){//j<i,就是除的数不大于除数,然后只要j<i就一直除 if(i%j==0){ //因为1和本身已经排除在外,所以如果i整除j,肯定不是质数,所以输出flag为false; flag=false; } } if(flag){ System.out.print( " "+i);//输出结果,一定要在外层循环,一个数输出一次。 } } //无注释版 System.out.print("\n100以内的质数:");//这里为与以上代码区分,所以用来\n换行 for (int i = 2; i <= 100; i++) { boolean flag = true; for (int j = 2; j < i; j++) { if ( i % j == 0) { flag = false; break; } } if(flag) { System.out.print(" "+i); } } //这个代码不能这么使用 // System.out.print("\n100以内的质数:");//这里为与以上代码区分,所以用来\n换行 // for (int i = 2; i <= 100; i++) { // // boolean flag = false; // // for (int j = 2; j < i; j++) { // // if ( i % j != 0) { // //这里排除1和本身,只要不整除其他数就是质数, // //举例15,15/4=3···余3,但是15不是质数 // flag = true; // break; // } // } // // if(flag) { // System.out.print(i+" "); // } // // } } }
-
需求:编写for循环找出:1~10000中的素数中所有的素数
/* 素数:又被称为质数,能够被1和自身整除,不能被其他数字整除的数字成为素数。 也就是说判断条件应该是:除的数只要不包含1和本身,只要有有一个数能被整除,就不是素数 不能是:只要没有可以整除的数,就是质数, 这个是错的i%j!=0 举例15 15/4=3···余3,15不能整除4,但是可以整除3和5,这里余数不为0,但15也不是质数 所以用这个条件判断是否为质数是错的 能整除1,i%1==0 任何数都能整除1, 自身整除 i%i==0 只能被自己整除, 升级:1~10000中的素数 要求:每八个换一行 每八个质数换一行,就要知道质数个数。而且一定是在循环之内,加个判断条件,每输出一个i就记录一次 判断是否为8个数的条件要放在外层循环之内, */ public class ForText10 { public static void main(String[] args) { System.out.println("10000以内的质数:"); int count=0;//计数 for(int i = 2; i <=10000;i++) { boolean flag = true;//默认为质数 for (int j = 2; j < i; j++) {//判断是否为质数 if (i % j == 0) {//不是质数的输出错 flag = false; break; } } if (flag) { count++;//统计i的个数,只要有一个符合条件count就会自加一 System.out.print(i+" ");//输出质数 if(count==8){//当i的个数为8时,输出换行,并且使count的值归0,从而继续换行 System.out.print("\n"); count=0; } } } // //第二种方法 // System.out.println("10000以内的质数:"); // int count=0; // for(int i = 2; i <=10000;i++) { // boolean flag = true;//默认为质数 // // for (int j = 2; j < i; j++) {//判断是否为质数 // if (i % j == 0) {//不是质数的输出错 // flag = false; // break; // } // } // if (flag) { // count++;//统计i的个数,只要有一个符合条件count就会自加一 // System.out.print(i+" ");//输出质数 // if(count%8==0){//当count可以整除8时,输出换行,也就是每8个换一行 // System.out.print("\n"); // } // } // } } }
-
水仙花数:一个三位数=个位的立方+十位的立方+百位的立方
例如:153=1³+5³+3³=1+125+27
public class Work0522 { public static void main(String[] args) { int g,s,b; System.out.print("100-999之间的水仙花数"); for(int i=100;i<=999;i++){ g=i%10; s=i/10%10; b=i/100%10; if(i==g*g*g+s*s*s+b*b*b){ System.out.print(" "+i); } } // // int num = 8461; // int ge = num % 10; // 分解获得个位数 // int shi = num / 10 % 10; // 分解获得十位数 // int bai = num / 100 % 10; // 分解获得百位数 // int qian = num / 1000; // 分解获得千位数 // System.out.println("数字: " + num); // System.out.println("千位数是: " + qian); // System.out.println("百位数是: " + bai); // System.out.println("十位数是: " + shi); // System.out.println("个位数是: " + ge); } }
-
成绩录入
import java.util.Scanner; public class Work05231 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.print("请输入需要录入成绩的人数:"); int peo=input.nextInt(); int a=0,b=0,c=0,d=0,e=0,f=0; for (int i = 1; i<=peo; i++) { System.out.println("请输入第"+i+"位同学的成绩"); int grade=input.nextInt(); if (grade>=90&&grade<=100) { a=a+1; }else if(grade>=80&&grade<90){ b=b+1; }else if(grade>=70&&grade<80){ c=c+1; }else if(grade>=60&&grade<70){ d=d+1; }else if(grade>0&&grade<60){ e=e+1; }else { System.out.println("您输入的成绩有误"); f=f+1; } } System.out.println("90~100分的人数为:"+a+"人"); System.out.println("80~90分的人数为:"+b+"人"); System.out.println("70~80分的人数为:"+c+"人"); System.out.println("60~70分的人数为:"+d+"人"); System.out.println("60分以下的人数为:"+e+"人"); System.out.println("计入分数人数为:"+(a+b+c+d+e)+"人"); System.out.println("成绩有误的人数为:"+f+"人"); System.out.println("共"+peo+"人"); } }
-
猜数
import java.util.Scanner; public class Work05233{ public static void main(String[] args) { int count=0; int number=(int)(Math.random()*100); for(int i=1;i<=20;i++){ Scanner input=new Scanner(System.in);//接受从键盘输入的数据 int y ; System.out.print("请输入数:"); y=input.nextInt(); if(y>number){ System.out.println("大了点,再猜!"); }else if(y<number){ System.out.println("小了点,再试试!"); }else if(y==number){ System.out.println("猜对了!"); break; } count++; } if(count==1) { System.out.println("你太有才了"); }else if(count>=2&&count<=7) { System.out.println("这么快就猜出来了,很聪明么!"); }else if(count>7&&count<20){ System.out.println("猜了半天才猜出来,小同志,尚需努力啊!"); }else{ System.out.println("猜了半天也没才出来,lj"); } } }