循环语句
当你想要重复执行某些语句时,循环语句就派上用场了,具体的格式为:Ⅰ while(布尔表达式) { ... }Ⅱ do { ... } while (布尔表达式)Ⅲ for(语句1; 布尔表达式; 语句2) { ... }Ⅳ for(数据类型 局部变量名称: 表达式) { ... }
用中文来理解while语句:当(while)我还有头发(布尔表达式),就一直敲代码(花括号的语句)
while(我有头发) { 敲代码;}
所以当判断我没头发时,花括号里的语句就不会执行了。
而用中文理解do...while语句,也是差不多的:做(do)敲代码(花括号的语句),当(while)我还有头发时继续敲代码do { 敲代码;} while(我还有头发)
注意:do...while与while的区别:do...while先执行一次语句再判断;while先判断再执行。所以无论while中的布尔表达式是否正确,都会先执行一次花括号中的语句。
以上的循环其实用的挺少的,至少作者是这样。我们常用的应该是for循环语句,因为它可以说把while和do...while压缩了一下。为什么这么说呢?看一下for后面括号的三个内容:语句1,布尔表达式,语句2,这三者不一定都要写,如果舍弃语句1,和语句2(!但不能省略 ;):for(; 布尔表达式; ) {}// 不能写成for(布尔表达式) {}
这时候for就和while没有区别了。但语句1和语句2作用还是很大的。其中,语句2比较好理解,就是表示循环体中最后的一条语句,也就是:
for(; 布尔表达式; 语句2) { ...}// =for(; 布尔表达式; ) { ... 语句2;}
以上两个结构本质上是一样的。
而语句1的作用相当于这条语句会在判断布尔表达式是否为真之前先执行一次,但大部分我们都是在里面声明一个或多个用于for里面的变量(出了for循环中的花括号,这个变量无效),或者是对之前有声明的变量进行赋值,因此语句1也称为初始化语句。
// 以下是常用的结构for(int i = 1; i 10; i++) {}// 可以定义多个变量for(int i = 1,j = 9; i < 5; i++){}
但注意:不能将语句1认为是执行循环体中最初始的语句:
for(语句1; 布尔表达式; 语句2) { ...}// !=for(; 布尔表达式; ) { 语句1; ... 语句2;}
以上的两个语句执行的效果是不同的!!!
以下举一个例子:
可以看出for中的语句1在这里指的是System.out.println("Start for:");而且我们可以看出它只执行了一次,并且无论布尔表达式是否正确都会执行,作者可以将以上的代码的i<10改成i>10自行验证。
如果到这里读者感觉还有点绕,那么再以我们的中文来理解for循环的结构:
for(我去当程序员;我有头发;掉一根头发) { 敲代码;}
以上的计算机语言就等于我们的汉语:我去当程序员了(语句1)!当我有头发时(布尔表达式)我去敲代码(花括号执行语句)每敲完一次代码我掉了一根头发(语句2)。
而增强for语句主要用在数组那边。而且可用性不高(如果do...while和while很少用,那么增强for几乎是没用到的)。之后到数组再介绍这种循环结构。 循环语句结构的介绍就到这了,还需要知道的是当循环体中的语句只有一句时,花括号可以省略(不过为了防止一些错误,建议都写上)并且循环语句是可以嵌套使用的,如:for(int i = 1; i < 10; i++) { for(int j = 1; j 5; j++){ for... }}
四种循环语句都可以相互嵌套,理论上也是可以嵌套无数个的。执行顺序的话,读者不要特殊化,先看最外层的for,里面的for先看做简单的语句就行,按照for的套路来,外层for执行语句1,再判断布尔表达式,布尔表达式成立,执行循环体,遇到第二个for,执行第二个for的语句1...只有当里面的for一个一个执行结束,外面的for才会执行接下去的语句,再执行语句2。这里方便理解,用两个for循环来理解:
for(int i = 1; i < 10; i++) { for(int j = 1; j < 5; j++){ System.out.println(j); System.out.println(i); } System.out.println(i);}
外层for先执行int i = 1;
之后判断i < 10是否成立,发现成立,执行花括号的内容,遇到内层for。
内层for先执行int j = 1;
之后判断j < 5是否成立,发现成立,执行花括号的内容。
输出j和i的值,
之后执行j++,(此时j的值变为2),重复上一步的过程
直到j
输出i
之后执行i++,(此时i的值变为2),重复第二步后的内容
直到i < 10不成立,循环结束。
条件判断语句
常用的条件判断语句主要由if,else,else if三者组成的。当你想满足某个条件再执行语句且不满足不执行该语句时就需要用到它。其语法格式如下:
Ⅰ if(布尔表达式) { ... } Ⅱ if(布尔表达式) { ... } else { ... } Ⅲ if(布尔表达式1) { ... } else if(布尔表达式2) { ... } else if(布尔表达式3) { ... } Ⅳ if(布尔表达式1) { //执行语句1 } else if(布尔表达式2) { //执行语句2 } else if(布尔表达式3) { //执行语句3 } else { //执行语句4 }
因为第四个格式包含了其他三个的格式,所以就拿第四个例子举例,你可以用中文去这么理解:
如果(if)明天晴天(布尔表达式1),那么就去晒太阳(执行语句1),不然如果(else if)明天下雨(布尔表达式2),那么就去游泳(执行语句2),再不然如果(else if)明天打雷(布尔表达式3),那么就玩电脑(执行语句3),都没发生的话不然(else)就睡觉(执行语句4)if(明天晴天) { 晒太阳;} else if (明天下雨) { 游泳;} else if (明天打雷) { 玩电脑;} else { 睡觉;}
以上只是例子,不建议读者亲自尝试噢。注意!以上的格式须知:
第三个和第四个格式中的else if是可以有多个的,理论上可以无数个。
当你的执行语句只有一句话的时候,可以不加花括号,不过建议都写上,防止遗漏。如:
public class Test { public static void main(String[] args) { // 执行语句只有一句,不用加花括号 if(3 > 1) System.out.println("right"); // 执行语句有多个,不能不加花括号 if(3 < 4) { System.out.println("3<4"); System.out.println("right"); } // 如果不加花括号,那么无论这个条件是否成立, // System.out.println("right")一定会执行 if(3 4) System.out.println("3<4"); System.out.println("right"); }}
条件判断语句和循环语句也是可以嵌套使用的,这里就不再演示。
最后还有个Java之数据类型及其运算符中的三目运算符,其格式是:
布尔表达式 ? 语句1 :语句2;其实这个运算符就是用来压缩if...else语句,使代码更精简的,比如:// 要求:我们令a等于一个数,如果这个数大于5,我们输出>5;反之输出!>5// 我们刚看完if的内容,所以顺理成章的,我们大概会写成以下的形式:public class Test { public static void main(String[] args) { int a = 1; if(a > 5) { System.out.println(">5"); }else { System.out.println("!>5"); } }}// 但使用了三目运算符后:public class Test { public static void main(String[] args) { int a = 1; System.out.println((a > 5) ? ">5" : "!>5"); }}
合理的运用三目运算符可以使你的代码更加精炼!
break
break这个关键字主要用于我们的循环语句和条件判断语句中的switch中,用来跳出循环或者switch语句的。在循环语句中,break经常与if搭配起来使用:public class Test { public static void main(String args[]) { for(int i = 1; i < 10; i++) { // i等于8的时候跳出循环 if( i == 8 ) { System.out.println("over"); break; // break只针对循环,对条件语句不起作用! } System.out.println(i); } System.out.println("for over!"); }}
当我们循环满足一定条件时想让它终止这个循环时,就需要用这样的结构来实现。
continue
当我们在循环结构中满足了一个条件,不想终止整个循环,而是想让它终止本次循环时,就需要用到continue这个关键字了:public class Test { public static void main(String args[]) { for(int i = 1; i < 10; i++) { // i等于8的时候结束本次循环 if( i == 8 ) { System.out.println("over"); continue; } System.out.println(i); } System.out.println("for over!"); }}
可以看到,当i=8时只是终止了8的这次循环,之后的循环继续进行着。
文章到这里,就剩下条件判断语句switch了,这个结构很少用到,但还是需要了解的:
当我们需要判断满足某种等于关系时,输出一些信息。我们可以用if...else if...else if...一直写下去,但Java还提供另一种写法:switch case,这个语句的结构大体上是:
switch (变量) { case 值1 : 执行语句1; break; case 值2 : 执行语句1; break; case 值3 : 执行语句1; break; ... default: 执行语句n;}
我们可以在switch之后的括号中写上一个byte,char,int,String(jdk7之后支持)类型变量,之后判断这个变量的值等于多少,等于值1时,执行语句1;等于值2时,执行语句2等等等,如果不等于列出的值,就执行default中的执行语句n。
注意!
想达到以上的额要求,break;这个必须要写。以以下代码为例:
// 要求:定义i的值,如果i等于相应的值,输出;否者输出Wrongpublic class Test { public static void main(String args[]){ int i = 10; switch(i){ case 10: System.out.println("10"); break; case 20: System.out.println("20"); break; case 30: System.out.println("30"); break; case 40: System.out.println("40"); break; case 50: System.out.println("50"); break; default: System.out.println("Wrong"); } }}
以上代码是正确的写法,但如果都不加break的话:
public class Test { public static void main(String args[]){ int i = 10; switch(i){ case 10: System.out.println("10"); case 20: System.out.println("20"); case 30: System.out.println("30"); case 40: System.out.println("40"); case 50: System.out.println("50"); default: System.out.println("Wrong"); } }}
当你没有匹配到正确的值是执行default的语句,看起来没有错。但如果匹配到了比如20的值,那么它执行完case 20的语句后没有停止,继续把之后的case和default语句执行了:
如果其中一部分加了break:
public class Test { public static void main(String args[]){ int i = 10; switch(i){ case 10: System.out.println("10"); case 20: System.out.println("20"); case 30: System.out.println("30"); case 40: System.out.println("40"); break; case 50: System.out.println("50"); default: System.out.println("Wrong"); } }}
那么i=20的时候执行到case 40时遇到break才停止。
总而言之,匹配到case之后会一直运行匹配的case后switch里面的语句,直到遇到break。
文章到这终于结束了。学习计算机语言一定要耐心。如果到这篇文章长到你有点学不下去的话,请记住,这才刚起步。你可以把文章拆分起来看。