Java学习第4天:分支结构

简介: Java分支结构:if-else和switch-case

二、程序流程控制

流程控制语句是用来控制程序中各语言执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
三种基本流程结构:

顺序结构

程序从上到下逐行执行,中间没有任何判断和跳转。

分支结构

根据条件,选择性地执行某段代码。
有if-else和switch-case两种分支语句。

循环结构

根据循环条件,重复性的执行某段代码。
有while、do……while,for三种循环语句
注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。

if-else

所有三元运算符都可以用if-else结构替代,if-else不一定能改成三元运算符。
如果既可以使用三元运算符又可以使用if-else,优先选用三元运算符。原因:简洁、执行效率高。
例如,3个数取最大值
class SanYuan{
public static void main(String[] args){
int n1=12;
int n2=30;
int n3=-43;
int max=((n1>n2?n1:n2)>n3)?(n1>n2?n1:n2):n3;//不建议这么写,可读性差
System.out.println("The max of n1 n2 n3 is " + max);
int max1,max2;
if(n1>n2){
max1=n1;
} else{
max1=n2;
} if(max1>n3){
max2=max1;
} else{
max2=n3;
}
System.out.println("The max of n1 n2 n3 is " + max2);
}
}

if语句三种结构(条件判断结构):

1、if(条件表达式){执行代码块} //只有一种选择
2、if(条件表达式){执行代码块1} else {执行代码块2} //二选一
3、if(条件表达式){执行代码块1} else if(条件表达式2){执行代码块2} else{执行代码块3} 多选一,中间可以多个elseif

&和&&的异同

都是且的关系
左边true,右边都执行
左边false,短路与后面不执行,逻辑与后面执行

Scanner类

从键盘获取不同类型的变量,char型的获取,Scanner没有提供相关办法,只能获取一个字符串。
当输入的值和获取的类型不一致时会报错。
具体实现步骤:
1、导包:import java.util.Scanner;写在类的上面,类Scanner在包util下。
2、Scanner的实例化,Scanner scan=new Scanner(System.in);
3、调用Scanner类的相关方法获取指定类型的变量,int num=scan.nextInt();

例1:

输入一个整数并输出。
import java.util.Scanner;
class Scan{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
System.out.println("The input number is "+i);
}
}
javac Scanner.java 
$ java Scan
88
The input number is 88

例2:

输入字符串。
import java.util.Scanner;
class ScannerString{
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
System.out.println("请输出你的名字:n");
String userName = sc.next();
System.out.println("欢迎"+userName+"登录系统");
}
}
$ javac ScannerString.java
$ java ScannerString
请输出你的名字:

lisi
欢迎lisi登录系统

例3:

输入期末考试成绩,100分降落宝马,80-99奖励手机,60-80奖励玩具,不及格什么都没有。
import java.util.Scanner;
class IfTest{
public static void main(String[] args){
int score;
Scanner scan = new Scanner(System.in);
System.out.println("请输入成绩,在0到100之间");
score=scan.nextInt();
if(score == 100){
System.out.println("奖励一辆BMW");
}else if(score < 100 && score > 80){
System.out.println("奖励一个手机");
}else if(score >= 60 && score <= 80){
System.out.println("奖励一个玩具");
                }
else{
System.out.println("什么都没有");
}
}
}
说明
1、else结构是可选的。
2、针对条件表达式:如果多个条件表达式之间是“互斥”关系,哪个判断在上面或下面都无所谓;如果有交集,应该考虑清楚哪个条件应该在上面;如果条件表达式之间有包含关系,需要将范围小的声明在上面,否则小的永远不会执行,因为if else只有一个出口。

例4:

输入3个整数,按小到大输出排序。
import java.util.Scanner;
class SortTest{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("Please insert the first number");
int num1 = scan.nextInt();
System.out.println("Please insert the second number");
                int num2 = scan.nextInt();
System.out.println("Please insert the third number");
                int num3 = scan.nextInt();
if(num1 > num2){
if(num2 > num3){
System.out.println(num3 + "," + num2 + "," + num1);
}else if(num3 > num1){
System.out.println(num2 + "," + num1 + "," + num3);
} else{
System.out.println(num2 + "," + num3 + "," + num1);
      }
} else {
if(num1 > num3){
                System.out.println(num3 + "," + num1 + "," + num2);
                }else if(num3 > num2){
                System.out.println(num1 + "," + num2 + "," + num3);
                } else{
                System.out.println(num1 + "," + num3 + "," + num2);
                      }
}
}
}
$ java SortTest
Please insert the first number
1000
Please insert the second number
0
Please insert the third number
888
0,888,1000
说明:
1、if-else可以互相嵌套,不过一遍不要嵌套3层以上,3层以上自己就晕了。
2、if-else 后面如果只有一行执行语句,可以省略{},一般不建议省略.
Java用法:
String isHandsome=scan.next();
if(isHandsome.equals("是"))

switch-case

结构switch(表达式){
case 常量1:

语句1;
//break;

case 常量2;

语句2;
//break;

case 常量N:

语句N;
//

default:

语句;
//break;

}
分支结构之二:switch-case
说明:
1、根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,会进入相应case中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或到switch-case结构末尾为止结束,后面的case条件不会做判断。

例子:

class SwitchCase{
public static void main(String[] args){
int num1=2;
switch(num1){
case 0:
System.out.println("zero");
case 1:
                        System.out.println("one");
case 2:
                        System.out.println("two");
case 3:
                        System.out.println("three");
default:
System.out.println("others");
}
}
}
$ java SwitchCase
two
three
others
2、break可以用在switch-case结构中,表示一旦执行到次关键字就跳出switch-case结构
3、switch结构中的表达式,只能是如下6中数据类型之一:byte、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)。
4、case后面只能声明常量,不能是范围值。
5、break关键字是可选的,不是必须加的,绝大多数情况都需要加。
6、default相当于if-else中的else,default选项是可选的,而且位置是灵活的,通常放到最后。

例1

switch-case判断成绩,小于60输出不合格,大于等于60输出合格。
class Test{
public static void main(String[] args){
int score=78;
switch(score/60){
case 0:
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
default:
System.out.println("输入值有误");
break;
}
}
}

例2:

输入年月日,计算出是第几天
import java.util.Scanner;
class Date{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份");
int years = scan.nextInt();
System.out.println("请输入月份,1-12");
int months = scan.nextInt();
System.out.println("请输入日期,1-31");
int days = scan.nextInt();
int sum=0;
switch(months){
case 12:
sum += 30;
case 11:
sum += 31;
case 10:
sum += 30;
case 9:
sum += 31;
case 8:
sum += 31;
case 7:
sum += 30;
case 6:
sum += 31;
case 5:
sum += 30;
case 4:
sum += 31;
case 3:
//判断是否闰年
if((years % 4 == 0 && years % 100 != 0)||(years % 400 == 0)){
sum += 29;
}else{
sum += 28;
}
case 2:
sum +=31;
case 1:
sum +=days;
System.out.println(years + "年" + months + "月" + days + "日" + "是当年的第" + sum + "天");
break;
default:
System.out.println("月份输入错误");
}
}
}
$ java Date
请输入年份
2019
请输入月份,1-12
12
请输入日期,1-31
31
2019年12月31日是当年的第365天

总结:

1、凡是可以使用switch-case的结构都可以转换为if-else。反之,不成立。
2、当我们写分支结构时,我们发现既可以使用switch-case,case取值不太多,又可以使用if-else时,优先选择使用switch-case。原因:switch-case执行效率稍高。

目录
相关文章
|
3月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
375 0
|
3月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
409 8
|
3月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
264 1
|
4月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
91 5
|
4月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
173 1
|
4月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
165 5
|
4月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
205 3
|
4月前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
109 1
|
4月前
|
设计模式 存储 Java
Java基础学习day07
本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。
156 1
|
4月前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
99 2