if分支语句
if 概述:在某些情况下,需要当某一条件满足时才执行相应代码,条件不满足则执行其他代码。
if 四种形式:单分支、双分支、多分支、嵌套if
单分支
if (布尔表达式) { //布尔表达式为true时需执行的代码; }
双分支
双分支if语句可以通过三目运算来转换,但前提是双分支各语句中必须是一个表达式;
if (布尔表达式) { //布尔表达式为true时需执行的代码; }else { //布尔表达式为false时需执行的代码; }
多分支——多个语句块中只执行一个语句块
if(布尔表达式1){ //布尔表达式1为true时执行的代码 }else if(布尔表达式2){ //布尔表达式1为false但是布尔表达式2为true时执行的代码 }else if(布尔表达式3){ //布尔表达式1和布尔表达式2为false但是布尔表达式3为true时执行的代码 }else{ //布尔表达式1、布尔表达式2和布尔表达式3均为false时执行的代码 }
嵌套if——一个分支结构中包含另一个完整分支结构:当有多个条件时分别判断多个条件可以提高程序可读性
if(布尔表达式1){ //布尔表达式1为true时执行的代码 if(布尔表达式2){ //布尔表达式1和布尔表达式2均为true时执行的代码 }else{ //布尔表达式1为true,但布尔表达式2均为false时执行的代码 } }else { //布尔表达式1为false时执行的代码 }
if分支语句中去掉括号,则对第一行代码有效
else不能单独使用
单分支和多分支的区别: 单分支语句会继续执行 下一行代码,多分支语句只执行一个语句块
例子:
某商城,在国庆节期间,根据用户积分数决定给用户送何种礼物,在控制台允许用户输入积分数x,根据用户的输入 在输出所送礼物。具体范围为:x<5000,则输出“国庆节快乐,送您一章贺卡!”
5000 <=x<10000,则输出“国庆节快乐,送您一个杯子!”
10000<=x<30000,则输出“国庆节快乐,送您一套餐具!”
x >= 30000,则输出“国庆节快乐,送您一套精美骨质瓷器!
public class case1 { public static void main(String[] args) { int score = 5001; if(score<0){ System.out.println("积分无效"); }else{ if(score<5000){ System.out.println("国庆节快乐,送您一张贺卡"); // 可以没有大括号,默认只对第一行代码有效 }else if(score>=5000 && score<10000){ System.out.println("国庆节快乐,送您一个杯子"); }else if(score>=10000 && score<30000){ System.out.println("国庆节快乐,送您一套餐具"); }else{ System.out.println("国庆节快乐,送您一套精美骨质瓷器"); } } } } 运行结果:国庆节快乐,送您一个杯子改进:
public class case2 { public static void main(String[] args) { int score = 5001; if(score<0) System.out.println("积分无效"); else{ if(score<5000) System.out.println("国庆节快乐,送您一张贺卡"); else if(score<10000) System.out.println("国庆节快乐,送您一个杯子"); else if(score<30000) System.out.println("国庆节快乐,送您一套餐具"); else System.out.println("国庆节快乐,送您一套精美骨质瓷器"); System.out.println("..............."); } 运行结果:国庆节快乐,送您一个杯子
} ............
switch分支语句
switch ( 表达式 ) { case 常量1 : 当表达式的值等于整型常量1时执行的语句; break;//当一种情况包含其他情况时 case 常量2 : 当表达式的值等于整型常量2时执行的语句; break; --- default: 当表达式的值不满足任何一个case的值时,执行的语句; }switch括号中的表达式结果类型可以是:byte、short、int、char以及枚举类型(JDK1.7中也允许是String类型);
为什么没有long、float、double和boolean
switch(i)不能用 long,double (表示的数值太大了) bool(只有ture和false两种类型 直接用 if else就欧克)
例子:
public class Aswitch1 { public static void main(String[] args) { String i = "4"; switch (i){ case "1" : System.out.println("星期一"); break; case "2": System.out.println("星期二"); break; case "3": System.out.println("星期三"); break; default : System.out.println("星期几"); } System.out.println("......."); 运行结果:星期几 } .......... }
public class Aswitch2 { public static void main(String args[]){ int i = 1; int k = 1; switch (i){ case 1 : System.out.println("星期一"); switch (k){ case 1: System.out.println("xingqiyi"); break; } break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; } System.out.println("........."); } }
没有break和加第一个break, 程序输出结果是 星期一
* xingqiyi星期二
星期三
........
加上2 3 4 个break,程序输出结果为 星期一
xingqiyi
.........
break用于只结束其所在当前switch语句块程序或当前循环的运行,但不会影响其所在语句块外部代码的执行
return则是结束当前整个方法
例如:
public class Areturn { static{ //静态代码块,类加载的时候执行 System.out.println(11111); } static void show(){ System.out.println("hello world"); return; /* * return 不能用于代码块,如果放在System.out.println("hello world");语句之前,会报错 * return只结束其所在方法的运行。 */ } public static void main(String[] args) { // TODO Auto-generated method stub /* * 尽管main方法写在下面,但是程序先执行,操作系统经过翻译执行 */ show(); System.out.println("my mame is"); }
此代码的运行结果为 11111
hello world
my name is
但是它的执行顺序为 1->3->2