搞定上一章节,你已经成功地入坑java,在进化成猿类的路途中,迈出了一大步。这一步有多大呢?嗯,很大,确实很大....嗯...你已经长出几根猴毛了
莫要忽悠我,今天你要不拿点真东西出来,看我不
今天,猿人工厂君就教你点真的东西,马上就告诉你一个程序世界的大秘密——
不管是啥语言,程序都是按照语句的顺序一行一行执行的!虽然代码看起来和鬼画符差不多,但是这些鬼画符是按照先后次序一行一行执行的!不信你看下面的结果
程序按照语句在程序中的先后次序一条一条的顺次执行,这种执行结构叫顺序结构。
如果...我写了打印“我是第2行”,但是我又不想让它执行,你有没什么办法哇?
看我的,小case:
等等,那个红框里的是个什么鬼?居然让我辛辛苦苦写的代码不行执行?哈哈,你不是不想打印“我是第二行”吗?猿人工厂君使用了控制语句,所谓控制语句就是用来改变程序的执行顺序,让程序按照我们设定的顺序去执行,从而达到控制程序的目的,以实现程序的各种结构。一般来讲,控制语句分为条件判断、选择、循环、跳出等语句。
上面那个红框就是中的东西就是条件判断语句
看清楚它的写法
它的含义是假如关系表达式成立(括号后的结果为true),就执行大括号里的语句。上面的执行条件太简单,你好可以搞复杂一点
敲完代码不许点执行,自己先写出答案,答错的自己回去看三遍猿人进化系列2!!!
顺便说一下,假如大括号里的语句只有一句,大括号可以省略,程序默认将执行距离关键字最近的一行代码,但是个人推荐写大括号,不要偷懒,小心bug.
等下等下,我现在改主意了,我想执行语句2,但是不想执行语句3肿么办?哈哈,找你的“二姨夫”吧
看清楚了,if...else...的写法
改造代码瞬间搞定!
假如关系表达式成立(结果为true),就执行大括号里的语句1,否则就执行else 后大括号里的语句2。还是那句话,不要偷懒,以免发生悲剧。
哈哈,我不想执行第二句,也不想执行第三句也又办法了。
这样写就可以了
就弱弱的问一句,还有其他办法木有?
哈哈,其实还有另一个办法——
先判断第一个条件判断,如果满足就执行语句1,并且不再执行后面的判断条件,如果不满足就执行判断条件2,如果满足就执行语句2,并且不再执行后面的判断条件..一直到n,只要满足就执行,并且不再执行后面的判断条件,如果都不满足,就执行最后的else里的语句。
看了这么多了,该换我来考考你了,还记得上一章节的三元表达式吧?
int a=10;
int b=12;
int d=0;
d=(a>b)?a:a b;
尝试下在不改变程序含义的情况下,使用if-else改写d=(a>b)?a:a b;(先动手,以后给出答案)
注意:三元语句绝大多数情况下都是可以用if else语句改写的,编写代码推荐if else 讲三元是为了大家理解语法。
我再来考考你,在程序中有一个变量a,当a的值为1的时输出“我是第1行”,当a的值为2时输出“我是第2行”,当a的值为3时输出“我是第3行”,已此类推,一直到第5行!
不要低估了我的智商!看我的!
骚年!要是输出10行:
在这个世界上,其实有一种语句叫做选择语句,其实还有一种操作——switch!
switch语法:将表达式里的值和case依次比较,一单表达式里的值和case的值相等,就执行后面的语句。如果在中途遇到break语句则结束。如果所有的case和表达式里的值不相等,就会执行default里的语句,然后结束程序。
1.表达式的值可以是byte,short,int,char,enum(枚举)类型,jdk7之后可以支持字符串。
2.default语句可以不写。
3.一定记得每个case最后写上break;否则程序会执行满足条件后的所有case!
轻松搞定!想知道不写break的后果吗?去掉吧,自己试试!
特别提醒:switch语句和if 语句可以互相转换,编写代码的时候大家尽量用if 把结构层次写清楚(也不要搞成街霸2.0),代码一看就明白,之所以讲switch,是为了让各位掌握语法结果,看懂代码,实际工作还是慎用吧。
小练习
switch (a) {
case 1: {
System.out.println("a=a" a);
}
case 2: {
System.out.println("a=a" a);
}
default: {
System.out.println("a=a" a);
}
}
将上面的switch修改正确,让每个合法输入 只会执行一个方法体里的语句。
小伙儿,我们来玩耍一个新的游戏——输出10000行,“猿人工厂,我爱你”
猿人工厂君,你——
机智如我怎么可能被难倒?打开excel,输入System.out.println(“猿人工厂,我爱你”);向下拉动到10000行,复制粘贴即可!
我擦,还未变成一只猿类就已经深谙猿类的身存知道,随身自带天生猿类秘籍CVS大法——
那现在打印10000000行试试?我擦,excle拉到底也拉不出!
哈哈,其实是有办法解决的,计算机最擅长的事情就是快速的做重复的事情,循环语句了解下!
循环语句
for循环语句
表达式1:初始化循环变量
表达式2:判断是否满足循环条件,如果满足条件,程序执行循环体语句(大括号内的语句),如果不满足,则跳出循环。
表达式3:给初循环变量做增量或者减量,以达到控制循环体执行次数的目的。
下面给出一个例子,计算从1到100的整数和。
循环语句2--while
100以内的整数和还可以这样写
while(布尔表达式){
需要执行的语句1;
…
需要执行的语句n;
循环控制语句;
}
do...while
do{
…
需要执行的语句n;
循环控制语句;
}while(布尔表达式);
执行流程:先执行一次循环体内的语句,然后判断是否满足条件。如果满足就执行循环体语句,不满足就结束循环。
你确定是正确的?当然是错的!While和do...while最本质的区别就是 do...while 会先”do”一次!所以会多加了一个——她
小练习:使用for,while,do...while分别计算100以内的偶数和。
跳出语句
小伙儿,看情形循环的写法你已经掌握得差不多了,下面来两个简单的问题玩耍下:
1. 输出100以内的第一个奇数,然后终止程序运行。
2. 输出100以内的第二个偶数,然后终止程序运行。
这个so easy!!!
System.out.println(2);
System.out.println(4);
不许使用人脑计算!写程序!哈哈,这下不会了吧,马上给你介绍一个武器——跳出语句!
break:跳出当前循环体
continue:程序结束本次循环,继续执行下一次循环
循环需要特别注意的地方
死循环
小伙儿,给你一个机会,见识点新东西,下面这段代码允许你CVS一把,运行下试试,
int i=0;
for(;;){
if(i%2==0){
continue;
}else if(i%5==0){
break;
}
System.out.println(i);
}
i ;
}
注意噢,for循环的三个表达式是可以不写的,只是把控制变量放在方法体里了,个人不推荐使用,大家了解就好。
恭喜你,中奖了!知道滋味了吧!生命不息,代码不止!!!
死循环:循环条件永远为true,程序会一直执行循环体。但是有些场景需要让程序阻塞住,会使用死循环实现,后面遇到再说。
想想看怎样修改代码才能让程序正确运行?
嵌套循环
哈哈,又来新东西了,上面个图形用循环语句打印出来看看吧。
算了直接给你代码吧
for(int i=0;i<10;i ){
for(int j=10;j>i;j--){
System.out.print("*");
}
System.out.println("");
}
}
没见过呢?这个就是嵌套循环。所谓嵌套循环,是指一个循环的循环体是另一个循环。当然,不止两层,你想又多少层就可以套多少层^_^
代码是给你了,不要忘记了下面的小练习:
把倒三角修改为打印正三角。
方法
不知道你发现没有,我们每次实现一个小功能的时候都需要创建一个新的类,新写一个方法,这样搞下去编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。
所谓方法,就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。
方法的定义
返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解。
方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
参数列表: 目前无参数, 带有参数的方法在后面的课程讲解。
return:方法结束。如果没有返回值那么方法的类型是void,方法大括号内的return可以不写。
修饰符: 目前固定写法 public static 。
方法的调用
方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在主方法中,直接写要调用的方法名字就可以调用了。
我们看下面这个例子:计算长方形的面积
那怎么调用呢?
那如果我想保留计算结果,被其它地方使用怎么办?