java控制流程-顺序结构-条件结构-循环结构

文章目录

    • ==数据输入==
      • 基本步骤
    • ==流程控制语句==
    • ==顺序结构==
    • ==分支结构==
      • if语句
      • switch语句
    • ==循环语句==
      • for语句
      • while循环
      • do...while语句
      • 三种循环结构的区别
      • 增强for循环
      • 死循环
      • 跳转控制语句
      • 循环嵌套
      • Random

数据输入

基本步骤

//①导包,代码出现位置必须在类定义之上。
import java.util.Scanner;
public class Demo1{
	public static void main(String[] args){
		//②创建对象,只有sc是变量名可以变,其他都不可以变;
		Scanner sc = new Scanner(System.in);
		//③接收数据,只有x是变量名可以变,其他的都不允许变;
		int x = sc.nextInt();
		//输出数据
		System.out.println("x:"+x);
	}
}

案例:

// 键盘输入三个数,找最大值。
import java.util.Scanner;//导包
public class Deno1{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);//创建对象
		int height1 = sc.nextInt();//接收数据
		int height2 = sc.nextInt();
		int height3 = sc.nextInt();
		int max = height1>(height2>height3?height2:height3)?height1:(height2>height3?height2:height3);
		System.out.println("max:" + max);
	}
}	

备注

2022/6/25
Scanner(InputStream source) 构造一个新的Scanner,产生从指定的输入流扫描的值
boolean nextInt() 将输入的下一个标记扫描为int

流程控制语句

分类:顺序结构、分支结构(if、switch)、循环结构(for、while、do…while)

顺序结构

介绍:是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行;程序中大多数的代码都是这样执行的。

分支结构

if语句

  • if语句格式1
if(关系表达式){//①计算关系表达式的值
	语句体;//②表达式值为true,执行语句体;否则不执行
}//③继续执行后面的语句内容
  • if语句格式2
if(关系表达式){//①计算关系表达式的值
	语句体1//②表达式的值为true,执行语句体1
}else{
	语句体2//③表达式的值为false,执行语句体2
}//④继续执行后面的语句内容
  • if语句格式3
if(关系表达式1{//①计算关系表达式1的值
	语句体1//②计算的值为true,执行语句体1;为false,计算关系表达式2的值	
}else if(关系表达式2{
	语句体2//③计算的值true,执行语句体2
}
....
else{//n如果没有任何表达式的值为true,执行语句体n+1
	语句体n+1}

案例 if格式2:
需求:输入一个数,判断是奇数还是偶数,控制台输出该整数是奇数还是偶数

import java.util.Scanner;
public class Deno1{
	public static void main(String[] args){
		System.out.println("请输入x的值:");
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		if (x % 2 == 0){
			System.out.println(x + "是偶数");
		}else{
			System.out.println(x + "是奇数");
		}
	}
}

案例 if格式3:
需求:输入一个数字(1-7),输出对应的星期

import java.util.Scanner;
public class Deno1{
	public static void main(String[] args){
		System.out.println("请输入1-7之间的一个数");
		Scanner sc = new Scanner(System.in);
		int week = sc.nextInt();
		if (week == 1){
			System.out.println(week + "是星期一");
		}else if(week == 2){
			System.out.println(week + "是星期二");
		}else if(week == 3){
			System.out.println(week + "是星期三");
		}else if(week == 4){
			System.out.println(week + "是星期四");
		}else if(week == 5){
			System.out.println(week + "是星期五");
		}else if(week == 6){
			System.out.println(week + "是星期六");
		}else{
			System.out.println(week + "是星期日");
		}
	}
}

案例 考试奖励:
数据测试:正确数据、边界数据、错误数据。都进行测试后,程序仍可以很好的运行,说明程序是健壮的。

//考试奖励:根据不同的分数得到不同的礼物。
import java.util.Scanner;
public class Deno1{
	public static void main(String[] args){
		System.out.println("请输入成绩:");
		Scanner sc = new Scanner(System.in);
		int score = sc.nextInt();
		if (score > 100 || score < 0){
			System.out.println("输入数据不合理");
		}else{
			if (score>= 90 && score <= 100){
			System.out.println("奖品1");
			}else if(score >= 80 && score < 90){
			System.out.println("奖品2");
			}else if(score >= 70 && score < 80){
			System.out.println("奖品2");
			}else{
			System.out.println("没有奖品");
			}
		}
	}
}

switch语句

格式:

switch(表达式){
* 格式说明:表达式取值可以为byteshortcharint,JDK5以后可以是枚举,JDK7以后可以是Stringcase1* case后面跟着的值要和表达式的值进行比较。则case后的值也可以是byteshortcharint
			语句体1break//break表示中断、结束的意思,用来结束switch语句。
	case2:
			语句体2break....//执行流程:①计算表达式的值②依次将表达式的值与case后的值进行比较,对应的值执行对应的语句③都不匹配的话,执行default里的语句体。
	default//表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
			语句体n+1[break;]
}
//在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break或者整体switch语句的结束为止。

备注

2022/6/25
switch的表达式必须是 枚举类型或整数表达式。

case穿透
在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break或者整体switch语句的结束为止。

案例:输入月份,输出对应的季节
方法一,普通方法

import java.util.Scanner;
public class Deno1{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int number = sc.nextInt();
		System.out.println("请输入1-12之间的数,用于表示月份:");
		switch (number){//一般方法。
			case 3 :
						System.out.println("春季");
						break;
			case 4 :
						System.out.println("春季");
						break;
			case 5 :
						System.out.println("春季");
						break;//当忘记写此处break的时候,输入5,会输出春季和夏季两个词。这种现象称为case穿透
			case 6:
						System.out.println("夏季");
						break;
			case 7:
						System.out.println("夏季");
						break;
			case 8:
						System.out.println("夏季");
						break;
			case 9:
						System.out.println("秋季");
						break;
			case 10:
						System.out.println("秋季");
						break;
			case 11:
						System.out.println("秋季");
						break;
			case 12:
						System.out.println("冬季");
						break;
			case 1:
						System.out.println("冬季");
						break;
			case 2:
						System.out.println("冬季");
						break;
			default:
						System.out.println("输入的月份有误");
						//最后如果前者都不匹配的话,执行default中语句体的时候,可以不用写break。
		}
	}
}

方法二:case穿透

import java.util.Scanner;
public class Deno1{
	public static void main(String[] args){
		System.out.println("请输入1-12之间的数,用于表示月份:");
		Scanner sc = new Scanner(System.in);
		int number = sc.nextInt();
		switch (number){//一般方法。
			case 3:
			case 4:
			case 5:
					System.out.println("春季");
					break;
			case 6:
			case 7:
			case 8:
					System.out.println("夏季");
					break;
			case 9:
			case 10:
			case 11:
					System.out.println("秋季");
					break;
			case 12:
			case 1:
			case 2:
					System.out.println("冬季");
					break;
			default:
						System.out.println("输入的月份有误");
						//最后如果前者都不匹配的话,执行default中语句体的时候,可以不用写break。
		}
	}
}

循环语句

特征:
①重复做某件事情②具有明确的开始和停止的标志

组成与语法:

  • 初始化语句
    用于表示循环开启时的起始状态(循环开始的时候什么样)
    可以是一条或多条语句,这些语句可以完成一些初始化操作
  • 条件判断语句
    用于表示循环反复执行的条件(判断循环是否能一直执行下去)
    使用一个结果值为boolean类型的表达式,能决定是否执行循环体。例如:a<3
  • 循环体语句
    用于表示循环反复执行的内容(循环反复执行的事情)
    任意语句,将被反复执行
  • 条件控制语句
    用于表示循环执行中每次变化的内容(控制循环是否能执行下去)
    使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果。常见i++、i–

for语句

格式:

for (初始化语句;条件判断语句;条件控制语句){//执行过程:①执行初始化语句;
//②执行条件判断语句,结果为false循环结束,true继续执行;④执行条件控制语句
	循环体语句;//③执行循环体语句
}//⑤回到②继续

循环执行过程:

循环执行流程为:
初始化语句》条件判断语句》true循环体》条件控制语句》
          条件判断语句》true循环体》条件控制语句》
                      ......
          条件判断语句》false》其他语句

案例:
在控制台输出1-5和5-1的数据。

public class Deno1{
	public static void main(String[] args){
		//main方法定义的时候,如果不写String[] args会报错。编译javac可以通过,但是运行java报错。
		int i;
		for(i = 1;i < 6;i++){
			System.out.println(i);
		}
		System.out.println("-----------");
		for(i = 5;i>0;i--){
			System.out.println(i);
		}
	}
}

案例:求1-5之间的数据和,并把结果输出。

public class Deno1{
	public static void main(String[] args){
		int sum = 0;
		for(int i =1;i<=5;i++){
			sum += i;
		}
		System.out.println("1-5之间数据的和sum = " + sum);
	}
}

案例:求1-100之间的偶数和,并把求和结果在控制台输出。

public class Deno1{
	public static void main(String[] args){
		int sum = 0;
		for(int i = 1;i<=100;i++){
			if(i % 2 == 0){
				sum += i;
			}
		} 
		System.out.println("1-100之间偶数之和sum=" + sum);
	}
}

案例:水仙花数输出
(水仙花数)①是一个三位数 ②水仙花数的个位、十位、百位的数字立方和等于原数。
注意:任意数字的指定位上的数值如何求
先使用整除操作将要求的数字移动到个位上,再使用取余操作取出最后一位上的值。

public class Deno1{
	public static void main(String[] args){
		int a = 0;
		int b = 0;
		int c = 0;
		for(int i = 100;i < 1000;i++){
			a = i / 100;
			b = i % 100 / 10;
			c = i % 10;
			if (i == (a*a*a + b*b*b + c*c*c)){
				System.out.println(i + "是水仙花数");
			}
		}
	}
}

案例:统计,水仙花数的数量

public class Deno1{
	public static void main(String[] args){
		int a = 0;//百位
		int b = 0;//十位
		int c = 0;//个位
		int sum = 0;//水仙花数数量
		for(int i = 100;i<1000;i++){
			a = i /100;
			b = i /10 % 10;
			c = i % 10;
			if(i == (a*a*a + b*b*b + c*c*c)){
				sum += 1;
			}
		}
		System.out.println("水仙花数="+sum);
	}
}

while循环

执行流程:

初始化语句》条件判断语句》true-循环体语句》条件控制语句》
		  条件判断语句》false》其他语句

基本格式:

while (条件判断语句){
		循环体语句;
		条件控制语句;
}

完整语句:

初始化语句;//执行流程:①执行初始化语句。
while(条件判断语句){//②执行条件判断语句,false循环结束
		循环体语句;//true执行循环体
		条件控制语句;//③执行条件控制语句,返回②
}

案例:用while实现五次“你要自律生活”的输出

public class Deno1{
	public static void main(String[] args){
		int i = 5;
		while(i>0){
			System.out.println("你要自律生活");
			i--;
		}
	}
}

案例:一张足够大的纸,它的厚度是0.1毫米,折叠多少次可以折成珠穆朗玛峰的高度(8844430毫米)

public class Deno1{
	public static void main(String[] args){
		double paper = 0.1;
		int count =0;
		int zf = 8844430;
		while (paper <= zf){
			paper *= 2;
			count++;
		}
		System.out.println("纸张需要折叠" + count + "次,才可以达到珠穆朗玛峰高度。");
	}
}

do…while语句

执行流程:

初始化语句》循环体语句》条件控制语句》条件判断语句》
	true》循环体语句》条件控制语句》条件判断语句》
	......
	false》其他语句

基本格式:

do{
	循环体语句;
	条件控制语句;
}while(条件判断语句);

完整格式:

初始化语句;
do{
	循环体语句;
	条件控制语句;
}while(条件判断语句);

案例:使用do…while实现五次“你的一切都将依靠你自己”

public class Deno1{
	public static void main(String[] args){
		int i = 0;
		do{
			System.out.println("你的一切都将依靠你自己");
			i++;
		}while(i<5);
	}
}

三种循环结构的区别

三种循环的区别:

  • for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行);
  • do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断);

for和while的区别(条件控制语句所控制的自增变量):

  • 对于for循环来说,自增变量归属于其语法结构中,在for循环结束之后就不能被再次访问到了;
  • 对于while循环来说,自增变量不归属于其语法结构中,在while循环结束之后还可以继续继续使用;

增强for循环

语法结构

for (元素类型 e : 数组或集合对象){
	// 代码
}

注意

  • 增强for循环冒号左侧 是定义变量,右边必须是数组或集合类型。且元素类型必须与数组或集合对象的元素类型相匹配。
  • 优点:使用简单;
  • 缺点:①只能从头到尾遍历,不能只遍历部分;②遍历list或数组,不能获得当前元素下标;
  • 增强for循环内部是使用迭代器完成的,任何实现Iterable接口的对象都可以被增强for循环遍历。其中Collection是Iterable的子接口。故此Map没有实现Iterable接口,则不能使用增强for循环遍历。

死循环

while的死循环格式是常用的;
命令提示符窗口中Ctrl+C可以结束死循环。

for(;;){
}
while(true){
}
do{
}while(true);

跳转控制语句

continue
用于循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行;
for循环中,程序立即跳转到更新语句;
while 或 do…while 循环中,程序立即跳转到布尔表达式的判断语句;

break
用于循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环。
跳出最里层的循环,并且继续执行该循环下面的语句。

public class Demo1{
	public static void main(String[] args){
		for(int i =1;i<=5;i++){
			if(i % 2 == 0){
				//情况1
				//continue; //情况2
				break; //情况3
			}
			System.out.println(i);
			//情况1:输出1-5
			//情况2:输出1,3,5
			//分析:i=1的时候,if是false,执行输出;i=2的时候,if是true,会跳出当前i=2的循环;i=3,if是false,执行输出;
			//情况3:输出1
			//分析:i=1的时候,if是false,执行输出;i=2的时候,if是true,会直接跳出for循环。
		}
	}
}

循环嵌套

语句结构:
顺序语句:以分号结尾,表示一句话的结束。
分支语句:if、switch,一对大括号表示其整体结构。
循环语句:for、while,一对大括号表示其整体结构 ;do…while以分号结尾表示其整体结构。
解释:
①任何循环结构对外都可以看成是一句话、一句代码;
②分支语句中包含分支语句称为分支嵌套;
③循环语句中包含循环语句称为循环嵌套。

案例:在控制台输出一天的小时和分钟。

public class Demo1{
	public static void main(String[] args){
		for(int hour = 0;hour<24;hour++){
			for(int minute = 0;minute <60;minute++){
				System.out.println(hour + "时" + minute +"分");
			}
		}
	}
}

Random

作用:用于产生一个随机数。
使用步骤:

//①导包
import java.util.Random;
//导包的动作必须出现在类定义的上面
//②创建对象
Random r = new Random();
//r是变量名,可以变,其他的都不允许变;
//③获取随机数
int number = r.nextInt(10);
//number是变量名,可以变,数字10可以变,其他都不允许变。获取数据的范围[0,10),0可以取,10不可以取

案例:
需求:产生1-100的随机数。
思路:通过Random对象.nextInt得到0-99的随机数 然后 +1即可

import java.util.Random;
public class Demo1{
	public static void main(String[] args){
		//随机产生一个[0,10)之间的数
		
		Random r = new Random();
		int number = r.nextInt(10);
		//System.out.println("number:" + number);
	
		//产生一个1-100之间的随机数
		int x = r.nextInt(100)+1;
		System.out.println("x:" + x);
	}
}

案例:猜数字,随机生成一个1-100之间的数,使用程序猜出这个数字是多少。
需要输入数字与随机生成的数字进行比较。

import java.util.Random;
import java.util.Scanner;
public class Demo1{
	public static void main(String[] args){
		Random r = new Random();
		int number = r.nextInt(100)+1;
		
		System.out.println("number:" + number);
		while(true){
			Scanner sc = new Scanner(System.in);
			int sc_number = sc.nextInt();
			if(sc_number > number){
				System.out.println("猜测值大于真实值");
			}else if(sc_number < number){
				System.out.println("猜测值小于真实值");
			}else{
				System.out.println("sc:" + sc_number);
				break;
			}
		}
	}
}

你可能感兴趣的:(java学习,java,开发语言,后端)