流程控制语句

流程控制语句结构

语句

Java要完成某个功能,需要通过执行语句来完成。例如:输出xx内容,就需要编写输出语句。

语句多了之后,就要控制这些语句执行的过程,是按顺序依次执行,还是用条件控制它们的执行,即有的执行,有的不执行,还是重复执行…,这就需要用到我们的流程控制语句结构。

流程控制语句结构

顺序结构

顺序结构:从上往下依次执行每一个语句。

分支结构

根据条件判断,有选择的执行某个语句,或某些语句。

(1)if-else条件判断

(2)switch-case选择结构

循环结构

“重复”执行某个或某些语句。

class StatementDemo{
	public static void main(String[] args){
		int a = 1;//①
		int b = 2;//②
		
		System.out.println("a = " + a + ",b =" + b);//③
		
		//分支结构
		if(a > b){
			System.out.println("a的值大");
		}else if(a < b){
			System.out.println("b的值大");
		}else{
			System.out.println("a,b的值一样大");
		}
		//3个分支选择1个执行
		
		//循环结构
		for(int i=1; i<=5; i++){
			System.out.println("你好");//重复执行5遍
		}
	}
}

输入和输出语句

输出语句
System.out.println(xxx);//输出内容之后换行
			//println()的()中可以空着,表示换行
System.out.print(xxx);//输出内容之后不换行
			//print()的()中不可以空着,否则会编译报错
class PrintDemo{
	public static void main(String[] args){
		System.out.println("hello");//输出完hello会换行
		System.out.println("world");//再输出world,再换行
		
		System.out.print("java");//输出完java不换行,光标在a的后面
		System.out.print("lalala");//继续输出lalala,仍然不换行,光标在l的后面
		
		System.out.println();//()空着,表示不输出任何内容,仅仅是换行
		//System.out.print();//()空着,错误的
		System.out.print("");//可以,表示输出一个空字符串,虽然也没有内容
		//System.out.print('');//错误,单引号中必须写一个字符,要么是空格,要么是\u0000
	}
}
输入语句

在程序运行时,从控制台由用户输入数据到程序中使用。即Java程序要接收用户在控制台输入的数据。

需要借助:java.util.Scanner工具类来完成。

如何使用?

(1)先在所有类的上方加一句:import java.util.Scanner;

import java.util.Scanner; //注意大小写,和空格,标点符号.

(2)声明一个Scanner类型的变量,并且给它new一个Scanner类的对象(关于对象的概念,大家等面向章节再细说)

//所有class的上面
import java.util.Scanner; //这句话的作用,是告诉编译器去java.util包(文件夹)下找Scanner.class文件

class InputDemo{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		//Scanner input 表示声明了一个Scanner类型的变量,input变量名可以自己命名
		//Scanner是一个类,属于Java的引用数据类型
		//=右边,是new了一个对象,赋值给input变量了,input又称为对象名
		
	}
}

(3)提示用户输入xx信息,并接收用户输入的信息

输入String字符串:input.next();

输入int值:input.nextInt();
输入double值:input.nextDouble();
输入boolean值:input.nextBoolean();
输入long值:input.nextLong();
输入float值:input.nextFloat();

输入char单字符:input.next().charAt(0);
    //charAt(0)取字符串的第1个字符
	//charAt(1)取字符串的第2个字符
	//..
Scanner类型的变量是什么名,后面就什么.next()Scanner input = new Scanner(System.in);
System.out.print("姓名:");
 String name = input.next();


 Scanner shuRu = new Scanner(System.in);
 System.out.print("姓名:");
 String name = shuRu.next();

(4)释放资源

input.close();
//所有class的上面
import java.util.Scanner; //这句话的作用,是告诉编译器去java.util包(文件夹)下找Scanner.class文件

class InputDemo{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		//Scanner input 表示声明了一个Scanner类型的变量
		//Scanner是一个类,属于Java的引用数据类型
		//=右边,是new了一个对象,赋值给input变量了,input又称为对象名
	
		System.out.print("姓名:");//提示用户输入姓名
		String name = input.next();//接收用户从控制台输入的姓名
		
		System.out.print("年龄:");
		int age = input.nextInt();
		
		System.out.print("体重:");
		double weight = input.nextDouble();
		
		System.out.print("是否本专业(true/false):");
		boolean pro1 = input.nextBoolean();
		
		System.out.print("是否本专业(是/否):");
		char pro2 = input.next().charAt(0);
		//input.next()先返回接收的字符串
		//.charAt(0)从接收的字符串中取第1个字符
		
		System.out.println("姓名:" + name);
		System.out.println("年龄:" + age);
		System.out.println("体重:" + weight);
		System.out.println("是否本专业:" + pro1);
		System.out.println("是否本专业:" + pro2);
		
		input.close();//释放资源
	}
}

//不能写这里 import java.util.Scanner;

class Other{
}

条件判断

单分支条件判断

语法格式:

if(条件表达式){
    当条件表达式成立(为true)时,需要执行的语句
}

执行特点:条件成立就执行对应的语句,不成立就不执行。

注意:当if的{}中只有1个语句时,可以省略{},但是一般情况下都是保留的。

案例需求:

从键盘输入你的年龄,如果年龄在[0, 150]范围内,显示年龄的值。如果输入的年龄不在这个范围,输出一句话:年龄输入有误!也可以显示错误的年龄值。

/*
案例需求:

从键盘输入你的年龄,如果年龄在[0, 150]范围内,显示年龄的值。
如果输入的年龄不在这个范围,输出一句话:年龄输入有误!
也可以显示错误的年龄值。

*/

import java.util.Scanner;

class IfDemo{
	public static void main(String[] args){
		Scanner sca = new Scanner(System.in);
		
		System.out.print("请输入年龄值:");
		int age = sca.nextInt();
		
		System.out.println("age = " + age);
		if(age<0 || age>150){//年龄不在[0, 150]范围内
			System.out.println("年龄输入有误!1");
			System.out.println("年龄输入有误!2");
		}
		
		sca.close();
	}
}
双分支条件判断

语法格式:

if(条件表达式){
    当条件表达式成立(为true)时,需要执行的语句1
}else{
    当条件表达式不成立(为false)时,需要执行的语句2
}

执行特点:if条件成立,就执行语句1,否则就执行语句2.

注意:当if的{}或else的{}中只有1个语句时,{}也可以省略,一般情况下都保留。

案例需求:

从键盘输入一个整数,判断它是偶数还是奇数,0归为偶数。

/*
案例需求:

从键盘输入一个整数,判断它是偶数还是奇数,0归为偶数。

*/
import java.util.Scanner;

class IfElseDemo{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		
		System.out.print("请输入一个整数:");
		int num = input.nextInt();
		
		if(num%2==0){
			System.out.println(num +"是偶数");
			System.out.println(num +"是双数");
		}else{
			System.out.println(num +"是奇数");
		}
		
		input.close();
	}
}
多分支条件判断

语法结构:

if(条件表达式1){
    当条件表达式成立1(为true)时,需要执行的语句1
}else if(条件表达式2){
    当条件表达式成立2(为true)时,需要执行的语句2
}else if(条件表达式3){
    当条件表达式成立3(为true)时,需要执行的语句3
}else if(条件表达式4){
    当条件表达式成立4(为true)时,需要执行的语句4
}....
else{
    当上述条件表达式都不成立(为false)时,需要执行的语句n+1
}

执行特点:

(1)先判断if(条件表达式1),如果成立,就执行对应的语句1,后面的条件和分支就不看了,不执行了。

(2)如果if(条件表达式1)不成立,继续判断if(条件表达式2),如果条件2成立,就执行对应的语句2,后面的条件和分支就不看了,不执行了。

(3)如果if(条件表达式2)也不成立,继续判断if(条件表达式3),如果条件3成立,就执行对应的语句3,后面的条件和分支就不看了,不执行了。

(4)以此类推

(5)当以上所有条件都不成立,执行最后的else分支。

注意:当if的{}或else的{}中只有1个语句时,{}也可以省略,一般情况下都保留。

案例需求:

从键盘输入成绩,有效的成绩范围是[0,100],

如果输入的成绩不在[0,100]范围,提示用户输入成绩错误!

如果输入的成绩是100,提示成绩满分;

如果输入的成绩是[80,99],提示成绩优秀;

如果输入的成绩是[70,79],提示成绩良好;

如果输入的成绩是[60,69],提示成绩及格;

如果输入的成绩是[0,59],提示成绩不及格。

/*
案例需求:
从键盘输入成绩,有效的成绩范围是[0,100],
如果输入的成绩不在[0,100]范围,提示用户输入成绩错误!
如果输入的成绩是100,提示成绩满分;
如果输入的成绩是[80,99],提示成绩优秀;
如果输入的成绩是[70,79],提示成绩良好;
如果输入的成绩是[60,69],提示成绩及格;
如果输入的成绩是[0,59],提示成绩不及格。
*/
import java.util.Scanner;

class IfElseIfDemo{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		
		System.out.print("请输入成绩[0,100]:");
		int score = input.nextInt();
		
		/*
		if(score<0 || score>100){
			System.out.println("输入成绩错误!");
		}else if(score == 100){
			System.out.println("满分");
		}else if(score>=80 && score<=99){
			System.out.println("优秀");
		}else if(score>=70 && score<=79){
			System.out.println("良好");
		}else if(score>=60 && score<=69){
			System.out.println("及格");
		}else if(score>=0 && score<=59){
			System.out.println("不及格");
		}//以上写法也对*/
		
		if(score<0 || score>100){
			System.out.println("输入成绩错误!");
		}else if(score == 100){
			System.out.println("满分");
		}else if(score>=80){//当条件判断到这里,说明上面2个条件不成立,0<=score<100
			System.out.println("优秀");
		}else if(score>=70){//当条件判断到这里,说明上面3个条件不成立,0<=score<80
			System.out.println("良好");
		}else if(score>=60){//当条件判断到这里,说明上面4个条件不成立,0<=score<70
			System.out.println("及格");
		}else{
			System.out.println("不及格");
		}//以上写法也对
		
		/*
		if(score<0 || score>100){
			System.out.println("输入成绩错误!");
		}
		if(score == 100){
			System.out.println("满分");
		}
		if(score>=80 && score<=99){
			System.out.println("优秀");
		}
		if(score>=70 && score<=79){
			System.out.println("良好");
		}
		if(score>=60 && score<=69){
			System.out.println("及格");
		}
		if(score>=0 && score<=59){
			System.out.println("不及格");
		}//以上写法也对  所有if都要判断*/
		
		input.close();
	}
}

选择结构

语法格式:

switch(表达式){
    case 常量值1:
        语句1;break;case 常量值2:
        语句2;break;....
     default:
        语句n+1;break;}

执行特点:

(1)入口:

A:当switch(表达式)的值与某个case后面的常量值相等了,就从这个case进入;

B:当switch(表达式)的值与所有case后面的常量值都不相等,就找default进入。

两种入口,无论default在哪里,都是先找case,如果case有匹配,就从case进入,没有case匹配,才从default进入。

(2)出口

A:switch结束}

B:break中断

(3)贯穿/穿透

从入口进入switch之后,会一直往下执行,直到遇到出口。可能从上一个case直接穿透到下一个case执行。

也可能从case穿透到default,或从default穿透到case。

switch的语法要求:

  • switch()中表达式的结果类型必须是byte,short,int,char四种基本数据类型,或String和枚举(后面面向对象再学习枚举)两种引用数据类型。
  • case后面必须写常量值,或常量名,不能是变量名
  • case后面的常量值不能重复

switch-case和if-else的区别

  • if-else的适用性更广

    • switch-case只能用于 表达式的值 是与几个常量值做比较的时候。
    • if-else既可以用于常量值的比较,也可以用于范围的比较等
  • switch-case的效率更高

    • if-else是需要从上往下依次判断条件,
    • switch-case根据表达式的值,直接找case,因为底层会对所有case做一个索引
    • 比喻:大家一起出去玩,住酒店,找某个同学的话,如果用if-else,挨个房间敲门问,这个同学是不是在这个房间
    • switch-case相当于有一张名单,记录每个同学在哪个房间,老师就可以直接去对应的房间找他
  • switch-case在某些场景下,可以利用穿透性,简化代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值