1 三元运算符
1.1 格式:
(条件表达式)?表达式1:表达式2;见下图:
1.2 运算规则:
先对条件表达式求值,得出一个逻辑值,如果为true,则返回表达式1的值,如果为false则返回表达式2的值;
注意:表达式1和表达式2必须同为同种类型。
1.3 典型用法--对两个数或三个数求最大值:
1 /* 2 获取最大值 3 */ 4 class Max{ 5 public static void main(String [] args){ 6 //定义变量 7 int a=3; 8 int b=4; 9 //三元运算求最大值 10 int max=a>b?a:b; 11 System.out.println("两个数比较最大值:"+max); 12 int c=19; 13 int max1=max>c?max:c; 14 System.out.println("三个数比较最大值:"+max1); 15 } 16 17 }
1.4 三元运算符和if-else的联系与区别:
1、 三元运算符可简化为if-else语句;
2 、三元运算符要求必须返回一个结果;
3 、if后的代码块可有多个语句,但三元运算符后只能有一条语句。
1.5 求60的十六进制
1 /* 2 求取60的十六进制 3 */ 4 class ShiLiu{ 5 public static void main(String [] args){ 6 //初始化变量 7 int i=60; 8 //求其后四位 9 int j=i&15;//与15进行与运算,获取i的最低4位的值 10 String str1=j>9?(char)(j-10+'a')+"":j+""; 11 i=i>>4; 12 String str2=i>9?(char)(i-10+'a')+"":i+""; 13 System.out.println(str2+str1); 14 } 15 16 }
结果:
2 程序执行流程分类
2.1顺序结构
程序从上到下逐行执行,中间没有任何判断和跳转;
2.2 分支结构
根据条件,有选择的执行某段代码;有if-else、switch两种分支语句;
2.2.1 在if-else中,如果省略了if或者else后面的{},那么if条件只能控制到其后的第一个分号处;
2.2.2 else if(){}中的语句想要执行,必须满足两个条件:
①:已经排除上一个else if的条件,或者if的条件,这是隐含的条件;
②:必须满足本else if的条件才能执行,这是显示条件。 if else 使用基本原则,总是优先把范围小的条件放在前面处理。
2.2.3 switch右一个控制表达式和多个case标签组成,和if语句不同的是,switch控制语句后面的表达式只能byte、short、int、char四种数值类型,或者是枚举和String类型(jdk1.7才开始支持),不能是boolean类型。
执行流程:根据变量的值,选择相应的case去判断,一旦满足case条件,就执行case的相应语句。如果没有break或者已经到结尾的话,会继续执行其下的case语句。如果所有的case都不匹配的话,那么执行default中的语句。
case 条件:其中条件只能是值,不能是取值范围! 当某些case没有break语句的时候,程序从条件表达式中的值和第一个匹配到的case语句开始执行,一直执行到遇到break或者最后。
2.3 循环结构
根据循环条件,重复性的执行某段代码;有while、do...while、for三种;JDK1.5提供了foreach循环,方便遍历集合、数组元素。 循环语句功能: 在某些条件满足的情况下,反复执行特定代码的功能,需要在某些特定时间把循环的条件改成false来结束循环,否则将是死循环
循环语句的四个组成部分: 1、初始化部分(initstatement)对一些变量进行初始化;2、 循环条件部分(testexp) 条件为true执行循环,条件为false不执行循环;3、 循环体部分(bodystatement) 条件为true时执行的语句 ;4、迭代部分(alterstatement)需要更改其值的变量
for循环中括号内的变量作用范围是{}内部,也可将其放在for循环前面。
2.4 键盘输入方法案例:
1 /* 2 键盘输入方法 3 */ 4 //导包 5 import java.util.Scanner; 6 class Scanner1{ 7 public static void main(String [] args){ 8 //创建一个Scanner类对象,System.in接收流输入 9 Scanner s=new Scanner(System.in); 10 System.out.println("请输入一个字符");//提示用户输入 11 String str=s.next();//next()从键盘获取一个字符串,并赋值给str进行接收 12 //将获取的字符串打印出来 13 System.out.println("你输入的字符串是"+str); 14 } 15 16 }
2.5 案例
1、从键盘输入小明的期末成绩。当成绩为100分时,奖励一辆BMW;当成绩为(80,99]时,奖励一个台iphone5s;当成绩为[60,80]时,奖励一本参考书;其它时,什么奖励也没有。
1 /* 2 对成绩进行分类 3 */ 4 //导包 5 import java.util.Scanner; 6 class TestIf{ 7 public static void main(String [] args){ 8 //创建一个Scanner类对象,System.in接收流输入 9 Scanner s=new Scanner(System.in); 10 System.out.println("请输入成绩:");//提示用户输入 11 int scor=s.nextInt();//next()从键盘获取一个字符串,并赋值给str进行接收 12 if(scor>100||scor<0){ 13 System.out.println("你输入的成绩不合法"); 14 } 15 else if(scor==100){ 16 System.out.println("棒极了,奖励一辆BMW"); 17 } 18 else if(scor>80){ 19 System.out.println("很好,奖励一台iphones"); 20 } 21 else if(scor>=60){ 22 System.out.println("不错,奖励一本书"); 23 }else 24 System.out.println("什么也没有"); 25 } 26 27 }
2、由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
1 /* 2 对三个数进行排序,从小到大排列 3 */ 4 //导包 5 import java.util.Scanner; 6 class TestSort{ 7 public static void main(String [] args){ 8 //创建一个Scanner类对象,System.in接收流输入 9 Scanner s=new Scanner(System.in); 10 System.out.println("请输入第一个整数:");//提示用户输入 11 int num1=s.nextInt();//next()从键盘获取一个字符串,并赋值给num1进行接收 12 System.out.println("请输入第二个整数:");//输入第二个数 13 int num2=s.nextInt(); 14 System.out.println("请输入第三个整数:");//输入第三个数 15 int num3=s.nextInt(); 16 //对输入的三个整数进行从小到大排列 17 System.out.println("三个整数从小到大的排列顺序为: "); 18 if(num1>num2){ 19 if(num3>num1){ 20 System.out.println(num2+","+num1+","+num3); 21 } 22 else if(num3<num2){ 23 System.out.println(num3+","+num2+","+num1); 24 } 25 else{ 26 System.out.println(num1+","+num3+","+num2); 27 } 28 29 }else{ 30 if(num3>num2){ 31 System.out.println(num1+","+num2+","+num3); 32 } 33 else if(num3<num1){ 34 System.out.println(num3+","+num1+","+num2); 35 } 36 else{ 37 System.out.println(num1+","+num3+","+num2); 38 } 39 } 40 } 41 42 }
3、去掉if语句的{} /* 去掉if后的{} */ //导包
1 /* 2 去掉if后的{} 3 */ 4 //导包 5 6 class TestIf1{ 7 public static void main(String [] args){ 8 int x=4; 9 int y=1; 10 if(x>2){ 11 if(y>2) 12 System.out.println(x+y);//if语句只能控制到这里 13 System.out.println("112");//这里无条件执行 14 }else 15 System.out.println("x is:"+x); 16 } 17 18 }
4、从键盘输入1-12月份值,使用switch判断出属于哪个季度,然后输出该季度名称。 例如:输入 4,显示第二季度。
1 /* 2 对月份进行季度判断 3 */ 4 //导包 5 import java.util.Scanner; 6 class CaseTesst{ 7 public static void main(String [] args){ 8 int sea=0;//定义 9 //创建一个Scanner类对象 10 Scanner s=new Scanner(System.in); 11 System.out.println("请输入一个月份:");//提示用户输入 12 int mon=s.nextInt();//next()从键盘获取一个正整数,并赋值给mon进行接收 13 if(mon==1||mon==2||mon==3){ 14 sea=1; 15 }else if(mon==4||mon==5||mon==6){ 16 sea=2; 17 }else if(mon==7||mon==8||mon==9){ 18 sea=3; 19 }else if(mon==10||mon==11||mon==12){ 20 sea=4; 21 }else 22 System.out.println("输入的月份不合法,请从新输入"); 23 switch(sea){ 24 case 1: 25 System.out.println("第一个季度"); 26 break; 27 case 2: 28 System.out.println("第二个季度"); 29 break; 30 case 3: 31 System.out.println("第三个季度"); 32 break; 33 case 4: 34 System.out.println("第四个季度"); 35 break; 36 } 37 } 38 39 }
2.3 for循环
循环格式:
执行顺序1-->2-->3-->4,如下案例:
1 /* 2 循环顺序测试 3 */ 4 //导包 5 import java.util.Scanner; 6 class TestFor{ 7 public static void main(String [] args){ 8 // for(int i=0;i<4;i++){ 9 // System.out.println("Hello World"); 10 11 // 12 int j=1; 13 for(System.out.print('a');j<3;System.out.print('b'),j++){ 14 System.out.print('c'); 15 } 16 System.out.println(); 17 } 18 19 }
结果:
编写程序,从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
1 /* 2 编写程序,从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。 3 */ 4 class TestDa{ 5 public static void main(String [] args){ 6 for(int i=1;i<=150;i++){ 7 System.out.print(i+" ");//不用换行,满足条件的话在后面追加 8 if(i%3==0){//判断是否是3的倍数 9 System.out.print("foo"+" "); 10 } 11 if(i%5==0){//判断是否是5的倍数 12 System.out.print("biz"+" "); 13 } 14 if(i%7==0){//判断是否是7的倍数 15 System.out.print("baz"); 16 } 17 System.out.println();//一行所有条件走完后统一换行 18 } 19 } 20 21 }
2.4 while循坏:
格式
[初始化语句]
while( 布尔值测试表达式){
语句或语句块; //循环执行语句
[更改语句;] //控制while何时结束
}
1 class TestWhile{ 2 public static void main(String [] args){ 3 4 int count = 1;//初始化语句 5 while(count <= 10);//没有循环语句块及break,一直空循环下去 6 { 7 System.out.println("正在循环打印..."); 8 count++ ; 9 } 10 11 } 12 13 }
for循环和while循环的差异
如果想要在循环体之外访问循环控制的变量的话,需要使用while循环,因为while循环的变量定义是在while循环体之外的;反之,当不需要在循环之外访问循环控制变量的话,就使用for循环
2.6 do-while 循环语句
语法格式:
[初始化语句]
do{
语句或语句块;
[更改语句;]
}while(布尔值测试表达式);
注意:在while表达式之后要加分号,且该循环会至少执行1次
1 /* 2 从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。 3 */ 4 import java.util.Scanner; 5 class TestZero{ 6 public static void main(String [] args){ 7 Scanner s=new Scanner(System.in); 8 int p_count=0;//定义正数变量,并初始化个数 9 int n_count=0;//定义负数变量,并初始化个数 10 while(true){ 11 System.out.println("请输入一个整数: ");//提示输入整数 12 int num=s.nextInt();//接收屏幕输入的整数 13 if(num>0){ 14 p_count ++;//统计正数个数 15 } 16 else if(num<0){ 17 n_count ++;//统计负数个数 18 }else 19 break; 20 } 21 System.out.println("正数的个数为: "+p_count); 22 System.out.println("负数的个数为: "+n_count); 23 } 24 25 }
2.7 循环嵌套
1 /* 2 循环嵌套 3 */ 4 class TestQian{ 5 public static void main(String [] args){ 6 for(int i=0;i<=10;i++){ 7 for(int j=0;j<=10-i;j++){ 8 System.out.print(" "); 9 } 10 for(int z=1;z<=2*i+1;z++){ 11 if(z==1||z==2*i+1){ 12 System.out.print("#"); 13 }else if(i==10){ 14 System.out.print("#"); 15 } 16 else 17 System.out.print(" "); 18 } 19 System.out.println(); 20 } 21 22 } 23 24 }
结果: