三元运算符:
1 //需求:获取三个数中最大的一个数。 2 3 int o , p , q ; 4 5 int temp = o>=p?o:p; 6 7 int max = temp>=q?temp:q; 8 9 //两条语句可以融合成一条写,但是不便于阅读。
程序的流程控制:1.顺序结构
2.判断结构
3.选择结构
4.循环结构
顺序结构:程序顺次往下执行,最简单结构,不需控制。
判断结构:
注意:1.条件表达式所谓条件,就是需要得出true或false的判断。
2.注意if语句明确自己的控制的范围,也就是用大括号,但是如果控制语句只控制一条语句的时候,大括号可以省略不写。
如果有多条语句而没有写大括号的话,if语句只控制的是其之后的第一条语句。
3.三元运算符是if else的语句的简写形式,但是并不能完全替换。三元运算符作为运算符必须要有运算结果,if else语句则可以有结果,也可以没有。
4.注意格式,if(条件表达式)之后千万不能加;,否则该表达式无控制体,之后的执行语句会作为单独的局部代码块执行,而不受if语句控制。
局部代码块的应用:性能优化控制,实际上虚拟机在内存中开辟的内存是有限的,让参与完运算并且之后不再使用的变量及早释放,节省资源。
1 //局部代码块的演示 2 3 {/*局部代码块,限定了作用范围和局部变量的生命周期,超出该范围,其中的变量和语句都从内存中释放了*/ 4 5 int x=3; //局部变量,其有限范围就在该局部代码块中 6 7 8 System.out.println("x= +x");//作用范围之内,可以调用到变量x 9 } 10 11 System.out.println("x="+x);/*作用范围之外,变量x已经在内存中释放,此处已经访问不到x*/
if语句练习
1 class IfTest 2 { 3 public static void main(String[] args) 4 { 5 //需求:练习用if语句,判断数字对应的星期。 6 7 8 int week = 8;//具体的值不确定,用一个变量来表示,可由用户来确定该值 9 10 if(week==1)//因为值的不确定性,对应结果也不确定,所以用if语句来判断。 11 { 12 System.out.println(week+"对应的是星期一。"); 13 } 14 else if(week==2) 15 { 16 System.out.println(week+"对应的是星期二。"); 17 } 18 else if(week==3) 19 { 20 System.out.println(week+"对应的是星期三。"); 21 } 22 else if(week==4) 23 { 24 System.out.println(week+"对应的是星期四。"); 25 } 26 else if(week==5) 27 { 28 System.out.println(week+"对应的是星期五。"); 29 } 30 else if(week==6) 31 { 32 System.out.println(week+"对应的是星期六。"); 33 } 34 else if(week==7) 35 { 36 System.out.println(week+"对应的是星期天。"); 37 } 38 else 39 { 40 System.out.println(week+"没有对应的星期。"); 41 } 42 } 43 }
1 class IfTest2 2 { 3 public static void main(String[] args) 4 { 5 /* 6 需求:一年有四季 7 3,4,5 春季 8 6,7,8 夏季 9 9,10,11 秋季 10 12,1,2 冬季 11 12 根据用户输入的月份,给出所对应的季节 13 */ 14 15 int month = 12;//定义一个变量来记录用户给出的月份数据。 16 17 if (month>12||month<1)//因为冬季的月份在数据来看是不连续的,因此先把有效数据以外的排除掉。 18 { 19 System.out.println("没有"+month+"月,没有对应的季节。"); 20 } 21 else if (month>=3&&month<=5)//if语句可以用来判断区间,切根据需求的特性,区间关系可以用逻辑运算符&&和||来连接,不用&和|。 22 { 23 System.out.println(month+"月是春季。"); 24 } 25 else if (month>=6&&month<=8) 26 { 27 System.out.println(month+"月是夏季。"); 28 } 29 else if (month>=9&&month<=11) 30 { 31 System.out.println(month+"月是秋季。"); 32 } 33 else 34 { 35 System.out.println(month+"月是冬季。");//除掉无效数据和其他数据连续月份以外剩下的月份即为冬季。 36 } 37 } 38 }
选择结构:
常规只有4中类型的数据可以通过switch语句进行选择:byte,short,int,char。之后java6.0和7.0增加了对枚举和字符串的switch语句选择的支持。
注意:1.switch语句当中,备选答案是无序的,把default放在第一位都没有问题,开始选择时,程序都会从第一个case开始选择起的,把有效答案选择完,如果都不正确会才会去读default。
2.switch语句结束的两种方式:break和大括号结尾。因此,switch语句最后一个选项的break语句可以省略,因为紧接着遇到了结束大括号。但是如果中间的break省略的话有可能会出现问题。(见后例)
3.switch和if有限时候可以互换,但是注意各自的应用场景:
if 1.对具体的值进行判断;2.对区间进行判断;3.对运算结果是boolean类型的表达式进行判断。
switch 1.对具体的值进行判断; 2.值的个数通常是相对固定的,值太多了不行。3.对于几个固定的值进行判断,建议使用switch,因为switch语句会将具体的答案全部加载进内存中,相对来说运行效率较高。
1 class SwitchTest 2 { 3 public static void main(String[] args) 4 { 5 6 {//对char类型进行一个switch选择语句的演示 7 int x=3,y=4; 8 char ch='*'; 9 10 switch(ch) 11 { 12 case '+': 13 System.out.println("x"+ch+"y="+(x+y)); 14 break; 15 case '-': 16 System.out.println("x"+ch+"y="+(x-y)); 17 break; 18 case '*': 19 System.out.println("x"+ch+"y="+(x*y)); 20 break; 21 case '/': 22 System.out.println("x"+ch+"y="+(x/y)); 23 break; 24 default: 25 System.out.println("无法运算,符号不支持。"); 26 break; 27 } 28 } 29 30 31 System.out.println("------------------华丽丽的一条分隔符---------------------------"); 32 33 34 {//对switch语句结束特点的一个演示 35 36 int a =2; 37 38 switch(a) 39 { 40 default: //switch中选项无序,default未必写到最后, 41 System.out.println("f"); 42 /*break; 如果备选答案没有正确的,程序会回到default来选此答案, 43 但是此处没有break,且已经选出一个答案了(默认缺省的default答案作为了正确答案), 44 则后边开始按照顺序结构执行,并且不再进行结果正确与否的判断。直到遇到break或大括号跳出switch语句。*/ 45 46 case 4: //1.不论选项顺序如何,始终从第一个case开始选起。2.一轮之后选择出答案后却没有跳出,此处就不再判断结果是否正确了。 47 System.out.println("a");//选出答案后,没有遇到跳出,按照顺序结构执行。 48 //break; 已经选出正确答案了,但是没有跳出,到了此处仍没有跳出。 49 50 case 3://一轮之后选择出答案后却没有跳出,此处就不再判断结果是否正确了。 51 System.out.println("c");//选出答案后,没有遇到跳出,按照顺序结构执行。 52 break;//遇到break跳出switch语句。 53 54 case 1: 55 System.out.println("d"); 56 break; 57 58 case 5: 59 System.out.println("e"); 60 //break; 最后一个选项的break可以省略,因为紧接着大括号就会跳出。 61 } 62 } 63 64 65 System.out.println("------------------华丽丽的一条分隔符---------------------------"); 66 67 68 {//用switch来是实现季节的选择 69 70 int month = 12; 71 72 switch(month) 73 { 74 case 3: 75 case 4: 76 case 5: 77 System.out.println(month+"月是春季。"); 78 break; 79 80 case 6: 81 case 7: 82 case 8: 83 System.out.println(month+"月是夏季。"); 84 break; 85 86 case 9: 87 case 10: 88 case 11: 89 System.out.println(month+"月是秋季。"); 90 break; 91 92 case 12://运行到此处判断答案正确,选择此条,但是没有执行内容,没有break,继续往下走,并且不在判断后续答案正确性。 93 case 1://不再判断答案,但是也没有执行内容和break,继续向下走。 94 case 2://虽然答案不正确,但是之前已选出正确答案,到这里不再判断继续向下执行。 95 System.out.println(month+"月是冬季。");//执行到该条,实现的效果相当于此条执行语句作为之前三条共同的备选答案的执行语句。 96 break;//遇到break跳出switch语句,完成选择结构。 97 98 default: 99 System.out.println(month+"不是有效的月份,无对应季节。"); 100 } 101 } 102 103 104 } 105 }
循环结构:
循环结构的两个要素:1.要控制住循环条件。 2.要控制住循环次数。
注意:千万别写成while();{} 要是加了分号就没有循环体了。 do{}while();后边要加分号,作为语句的结束。
阶加算法:
1 class WhileTest 2 { 3 /* 4 需求:1到100的和 5 0+1 6 1+2 7 3+3 8 6+4 9 10+5 10 .... 11 12 思路:1,参与运算的数在变化。 13 2. 和不确定,在变化。 14 3. 参与运算的值有递增的规律。 15 4.一直在重复加法运算。(重复即是循环) 16 17 18 累加(阶加)算法 19 20 */ 21 public static void main(String[] args) 22 { 23 int x = 1;//定义一个变量表示参与预算的数。 24 int sum = 0; //定义一个变量记录和。 25 26 while(x<=100) 27 { 28 sum=sum+x; 29 x++; 30 } 31 32 System.out.println("1到100的和为:"+sum); 33 } 34 35 }
计数器思想:记录一个变化的情况,注意不一定是递增。
1 class WhileTest2 2 { 3 /* 4 需求,1~100之间3的倍数出现的个数。 5 6 7 思路:1. 参与筛选的数值不确定的,定义一个变量来代表。 8 2. 3的倍数出现的次数不确定,定义一个变量来记录。 9 3. 筛选3的倍数的方法,判断:被筛选数与3求模,模为0则为3的倍数。 10 4. 遍历求模是一个重复的过程,应当用到循环结构。 11 */ 12 13 public static void main(String[] args) 14 { 15 int x = 1;//定义一个变量来表示参与筛选的数值。 16 int count = 0;//定义一个变量来记录筛选出来的数据的个数。 17 18 while (x<=100) 19 { 20 if(x%3==0)//判断出3的倍数 21 { 22 count++; 23 System.out.println("1~100之间3的第"+count+"个倍数是:"+x); 24 } 25 26 x++; 27 } 28 29 System.out.println("1~100之间3的倍数共有"+count+"个。"); 30 } 31 32 }
for循环:
注意要理解原理,不要被for循环常用格式所固话思想,以下情况是可以的。
1 int i=1; 2 3 for(System.out.println("a"),System.out.println("b");i<=3;System.out.println("c"),System.out.println("d")) 4 { 5 System.out.println("e"); 6 i++; 7 }
1 for(int a=3, b=5 ; a<10 ; a++,b--) 2 { 3 .......... 4 }
for和while的特点:
1.都是循环且都要加条件判断,因此两者可以互换。
2.格式上的不同,意味着使用上有所区别,如果需要通过变量来对循环进行控制,该变量只作为循环增量存在时区别就体现出来了,for循环用完该变量之后,该变量就释放了(循环体结束)。while使用完该变量之后,该变量仍驻留在内存中,循环之后的位置仍可以使用。
无限循环是有用途的,阻塞式方法。其中满足某些状态也许会结束,也许不会结束,根据具体需求。
无限循环的最简单形式表现:
while(true){....} for(;;){.....} for的三个表达式都可以不写,头尾不写是没有,中间那个条件表达式不写则默认是true。
什么时候使用循环结构:当对某些代码执行很多次时,使用循环结构完成。
当对一个条件进行一次判断时,可以使用if语句;
当对一个条件进行多次判断时,可以使用while语句。
在使用循环时注意一定要明确:哪些语句需要参与循环,哪些语句不需要参与循环。不能一味塞到循环体中。
再次强调循环通常情况:1需要定义条件(判断真假),2需要控制次数。