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