Java 读书笔记 (十) 循环
2017-12-25 11:48 钱先生 阅读(270) 评论(0) 编辑 收藏 举报while循环
只要布尔表达式为true,循环就一直执行下去。
1 public class Test( 2 public static void main(String args[]){ 3 int x=10; 4 while(x<20){ 5 System.out.print("value of x: "+x); 6 x++; 7 System.out.print("\n"); 8 } 9 } 10 } 11 12 /*执行结果: 13 value of x:10 14 value of x:11 15 value of x:12 16 value of x:13 17 value of x:14 18 value of x:15 19 value of x:16 20 value of x:17 21 value of x:18 22 value of x:19 23 */
do... while 循环
不满足条件,循环也会至少执行一次。
1 do { 2 // 代码语句 3 }while(布尔表达式);
布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。如果布尔表达式的值为true,则语句块一直执行,直到布尔表达式的值为false.
1 public class Test{ 2 public static void main(String args[]){ 3 int x =10; 4 5 do{ 6 System.out.print("value of x: "+x); 7 x++; 8 System.out.print("\n"); 9 }while(x<20); 10 } 11 }
/*执行结果:
value of x:10
value of x:11
value of x:12
value of x:13
value of x:14
value of x:15
value of x:16
value of x:17
value of x:18
value of x:19
*/
下面这个例子可以看出while 和do...while的区别。如果是while句式,不会返回x的值因为条件不满足。
1 1 public class Test{ 2 2 public static void main(String args[]){ 3 3 int x =10; 4 4 5 5 do{ 6 6 System.out.print("value of x: "+x); 7 7 x++; 8 8 System.out.print("\n"); 9 9 }while(x<10); 10 10 } 11 11 } 12 13 14 // 执行结果: value of x:10
for 循环
循环结构更为简单。 for循环执行的次数是在执行前就确定的。
1 for(初始化;布尔表达式;更新){ 2 //代码语句 3 }
关于for循环有以下几点说明:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测布尔表达式,循环执行上面的过程。
1 public class Test{ 2 public static void main(String args[]{ 3 4 for(int x=10; x<20; x=x+1){ 5 System.out.print("value of x: "+x); 6 System.out.print("\n"); 7 } 8 } 9 }
Java 增强for循环
Java5引入了一种主要用于数组的增强型for循环。格式如下:
1 for (声明语句: 表达式) 2 { 3 //代码句子 4 }
声明语句: 声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
1 public class Test{ 2 public static void main(String args[]{ 3 int [] numbers = {10,20,30,40,50}; 4 5 for (int x: numbers){ 6 System.out.print(x); 7 System.out.print(","); 8 } 9 System.out.print("\n"); 10 String [] names = {"James","Larry","Tom","Lacy"}; 11 for (String name: names){ 12 System.out.print(name); 13 System.out.print(","); 14 } 15 } 16 }
/*执行结果:
10,20,30,40,50,
James,Larry,Tom,Lacy,
*/
break 关键字
主要用在循环语句或者switch语句中, 用来跳出整个语句块。
break跳出最里层的循环,并且继续执行该 循环下面的语句.
1 public class Test{ 2 public static void main(String args[]){ 3 int[] numbers ={10,20,30,40,50}; 4 5 for /9int x:numbers){ 6 //x等于30时跳出循环 7 if (x==30){ 8 break; 9 } 10 System.out.print(x); 11 System.out.print("\n"); 12 } 13 } 14 }
/*
执行结果:
10
20
*/
continue 关键字 //continue的作用,到底什么情况下要用到continue,依下例,应该是用来跳过循环中某些值?
continue适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在for循环中,containue语句使程序立即跳转到更新语句。
在while或者do...while循环中, 程序立即跳转到布尔表达式的判断语句。
1 public class Test{ 2 public static void main(String args[]){ 3 int [] numbers={10,20,30,40,50}; 4 5 for (int x:numbers){ 6 if(x==30){ 7 continue; 8 } 9 System.out.print(x); 10 System.out.print("\n"); 11 } 12 } 13 }
/*
执行结果:
10
20 //跳过了30
40
50
*/
1 //九九乘法表 2 public class Main{ 3 public static void main(String args[]){ 4 for(int i=1;i<=9;i++){ 5 for(int j=1;j<=9;j++){ 6 System.out.print(j+"*"+i+"="+i*j+""); 7 } 8 System.out.println(); 9 } 10 } 11 } 12 13 /*第一个for 循环:代表行数。定一个整形变量i,它的初始值是1;判断i是否小于等于9; 如果成立,i就自增1. 14 第二个for循环: 代表列数。定一个整形变量j,它的初始值是1;判断j是否小于等于9,如果成立,j就自增1。 15 */
switch 语句
switch语句判断一个变量与一系列值中某个值是否相等, 每个值称为一个分支。
1 switch(expression){ 2 case value: 3 //语句 4 break; //可选 5 case value: 6 //语句 7 break; //可选 8 //可以有任意数量的case语句 9 default: //可选 10 //语句 11 }
//听起来switch ... default 相当于 if...else
switch 语句规则:
- switch语句中的变量类型可以是: byte、short、int或者char.从Java SE7开始, switch 支持字符串类型了,同时case标签必须为字符串常量或字面量。 //什么是字面量?
- switch 语句可以拥有多个case 语句, 每个case后面跟一个要比较的值和冒号。
- case语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
- 当变量的值与case语句的值相等时,case语句之后的语句开始执行,直到break语句出现才会跳出switch 语句。
- 当遇到break语句时,switch 语句终止。程序跳转到switch语句后面的语句执行。case语句不必须要包含break语句,如果没有break语句出现,程序会继续执行下一条case语句,直到出现break语句 。
- switch 语句可以包含一个default分支,该分支必须是switch语句的最后一个分支。default在没有case语句的值和变量值相等的时候执行。default分支不需要break语句。
1 public class Test{ 2 public static void main(String args[]){ 3 // char grade = args[0].charAt(0); 4 char grade ="C"; 5 6 switch(grade) 7 { 8 case "A": 9 System.out.porintln("优秀"); 10 break; 11 case "B": 12 case "C": 13 System.out.println("良好") 14 break; 15 case "D": 16 System.out.println("及格"); 17 case "F": 18 System.out.println("你需要再努力努力"); 19 break; 20 default: 21 System.out.println("未知等级"); 22 } 23 } 24 25 /*执行结果: 26 良好 27 你的等级是c 28 */
小程序编制:
在控制台输入由"*"组成的菱形。 //编程思路是如何确定的?
1 1 public class Main{ 2 2 //下面是升序的代码 3 3 public void prit1(float c){ 4 4 float p =c/2; //升序排序 5 5 float d; //声明行数变量 6 6 float e; //声明打印*号的变量 7 7 float f; //声明打印空格的变量 8 8 float r; //声明升序排序 9 9 float s=c%2; //取模 10 10 if(s==0){ 11 11 System.out.println("你输入的数据不能形成菱形结构"); 12 12 } else{ 13 13 for (d=1; d<=p;d++){ 14 14 for(f=p;f>=d;f--) { 15 15 System.out.print(" "); 16 16 } 17 17 for (e=1;e<=d*2-1;e++){ 18 18 if(e==1||e==d*2-1){ 19 19 System.out.print("*"); //如果是第一个数和最后一个数,就输入* 20 20 } else{ 21 21 System.out.print(" "); //否则输入空格 22 22 } 23 23 } 24 24 System.out.println(); 25 25 } 26 26 } 27 27 } 28 28 29 29 30 30 //下面是打印倒序的代码 31 31 public void prit2(float m){ 32 32 float i; //声明行数变量 33 33 float j; //声明打印*号的变量 34 34 float k; //声明打印空格数的变量 35 35 float n=m/2+1; //倒序排序 36 36 float o=m%2; //取模 37 37 if(o==0){ 38 38 System.out.println(""); 39 39 } else{ 40 40 for (i=1; i<=n;i++){ 41 41 for(k=0;k>=i;k++) { 42 42 System.out.print(" "); 43 43 } 44 44 // 下面打印*号个数据循环 45 45 for (j=(n-k)*2-2;j>=1;j--) //打印*号个数的循环; 46 46 { 47 47 if(j==(n-k)*2-2||j==1){ 48 48 System.out.print("*"); //如果是第一个数和最后一个数,就输入* 49 49 } else{ 50 50 System.out.print(" "); //否则输入空格 51 51 } 52 52 } 53 53 //打印完*号换行打印 54 54 System.out.println(); 55 55 } 56 56 } 57 57 } 58 58 59 59 public static void main(String[] args) { 60 60 Main a = new Main(); 61 61 float b = 11; //根据行数,判断是否可以组成菱形。如果基数行可以输入对弈的菱形,如果是偶数行则输出"你输入的数据不能形成菱形结构"; 62 62 a.prit1(b); 63 63 a.prit2(b); 64 64 } 65 65 } 66 66 67 67 // 这样打出来,前半截是对的,下面是两条平行线。
1 //这个打印出来是正确的菱形 2 public class Main{ 3 int a,b; //a是要生成的菱形行数 4 int h; //h是方法中的参数,也是行数 5 int i,j; //i j是循环结构参数 6 public void draw(int h) { 7 for (i = 1; i <= h; i++) { //逐行打印 8 for (j = 1; j <= h; j++){//每行打印个数与行数保持一致 9 //下面语句是菱形四条边的函数,在边上的坐标点,打印*,否则打印空格 10 if (j == (h + 3) / 2 - i || j == (h - 1) / 2 + i || j == i - (h - 1) / 2 || j == (3 * h + 1) / 2 - i) { 11 System.out.print("*"); 12 } else { 13 System.out.print(" "); 14 } 15 } 16 System.out.println(); //第i行打印完换行 17 18 } 19 } 20 public static void main(String[]args){ 21 Main b=new Main(); 22 int a=35; 23 b.draw(a); 24 } 25 }