IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Java流程控制 -> 正文阅读

[PHP知识库]Java流程控制

程序流程控制

顺序结构

  • 程序从上到下逐行执行,中间没有任何判断和跳转。
  • 如果没有任何流程控制,程序总是从上到下执行每条语句。

分支结构

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

if-else结构

  • else是可选的
  • 针对多个条件表达式之间是“互斥”关系(或者没有交集的关系)。
  • 如果多个条件表达式之间有交集关系,需要根据实际情况,考虑应该将哪个结构声明在上面。
  • 如果多个条件表达式之间有包含关系,一定要先处理包含范围小的情况,否则范围小的没机会运行。
  • if-else结构是可以嵌套的。

if语句三种格式

if(条件表达式){
	执行表达式;
}

java_circl_01

if(条件表达式){
	执行表达式1;
}
else{
	执行表达式2;
}

java_circl_02

if(条件表达式){
	执行表达式1;
}
else if{
	执行表达式2;
}
... ...
else{
	执行表达式n;
}

java_circl_03

具体举例

class IfTest{
	public static void main(String[] args){
		//格式1
		int hearBeats = 78;
		if(hearBeats < 60 || hearBeats > 100){
			System.out.println("需要进一步检查!");
		}
		System.out.println("检查结束");
		
		//格式2
		int age = 23;
		if(age < 18){
			System.out.println("你不能结婚");
		}else{
			System.out.println("你可以结婚");
		}
		
		//格式3
		if(age < 0){
			System.out.println("您输入数据非法!");
		}else if(age < 18){
			System.out.println("青年时期");
		}else if(age < 35){
			System.out.println("青壮年时期");
		}else if(]age < 60){
			System.out.println("中年时期");
		}else{
			System.out.println("老年时期");
		}
	}
}
  • if、else-if、else后面花括号内的多行代码被称为代码块,一个代码块通常看作一个整体来执行(除非运行过程中遇到return、break、continue等关键字,或是遇到了异常。)
  • else的含义是“否则”,else本身就是一个条件,这也是把if、else后面代码块统称为条件执行体的原因,else的隐含条件是对前面的条件取反

switch-case结构

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

switch-case结构

  • 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句后,仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或程序终止为止。
  • 在switch-case结构中,一旦执行break关键字,就跳出switch-case结构。
  • switch结构表达式,只能是byte、short、char、int四种整数类型和枚举类型、String类型(Java7开始允许),6中数据类型之一,不能是boolean类型
  • case之后只能声明常量不能声明 范围。
  • break关键字是可选的。
  • default相当于if-else中的else。

例子

String season = "summer";
switch(season){
	case"spring":
		System.out.println("春天");
		break;
	case"summer":
		System.out.println("夏天");
		break;
	case"autumn":
		System.out.println("秋天");
		break;
	case"winter":
		System.out.println("冬天");
		break;
	default:
		System.out.println("季节输入有误!");
		break; 
}

关于break例题

//从键盘输入2019年的“month”和“day”,要求通过程序输入的日期为2019年的第几天

import java.util.Scanner;
class SwitchCaseTest2{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入2019年month:");
		int month = scanner.nextInt();
		System.out.println("请输入2019年day:");
		int day = scanner.nextInt();
		
		switch(month){
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9:
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				sumDays += 28;
			case 2:
				sumDays += 31;
			case 1:
				sumDays += day;
		}
		System.out.println(sumDays);
	}
}

说明break在switch-case中是可选的

  • 凡是使用switch-case的结构,都可以转化为if-else。反之,不成立。
  • 写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。

循环结构

  • 在某些条件满足的情况下,反复执行特定代码的功能。
  • 有for、while、do-while三种循环语句。

循环结构
注:JDK1.5提供了for-each循环,方便地遍历集合、数组元素。

循环结构的4个要素

① 初始化条件
② 循环条件 (条件是boolean类型)
③ 循环体
④ 迭代条件

for循环结构的使用

for循环的结构

for(;;){}

执行过程:① -> ② -> ③ -> ④ -> ② -> ③ -> ④ … -> ②

for循环圆括号内两个分号是必须的,初始化语句、循环条件、迭代语句都是可以省略的,如果省略了循环条件,则这个循环条件默认为true,将会产生一个死循环。

public class Text09 {
	public static void main(String[] args) {
	        //省略了for循环的三个部分,循环条件一直是true		
	        for (;;) {
	        	System.out.println(123);
	   	}
	}

输出

123

123

使用for循环时,还可以把初始化条件定义在循环体外,把循环迭代语句放在循环体内,这种方式类似下面的while循环。

public class Text10 {
	public static void main(String[] args) {
			int i = 0;
			for (;i<3;) {
			System.out.println(i);
			i++;		
			}		
			System.out.println("循环结束");	
			}
		}

输出:

0
1
2
循环结束

for循环例题

/*题目 :输入两个正整数m和n,求其最大公约数和最小公倍数比如:12和20的最大公约数是4,最小公倍数是60*/
import java.util.Scanner;
class ForTest{public static void main(String[] args){	
	Scanner scan = new Scanner(System.in);		
	System.out.println("请输入第一个整数:");		
	int m = scan.nextInt();		
	int m = scan.nextInt();				
	System.out.println("请输入第一个整数:");		
	int m = scan.nextInt();				
	//获取两个数的最大公约数		
	int min = (m <= n)? m : n;		
	for(int i = min;i >= 1;i--){			
		if(m % i == 0&& n %i == 0){				
			System.out.prinyln("最大公约数为:" + i);				
		break;//一旦在循环中执行到break,就跳出循环			
		}		
	}				
	//获取两个数的最小公倍数		
	int max = (m >=n)? m : n;		
	for(int i = max;i <= n*m;i++){			
		if(m % i == 0&& n %i == 0){				
			System.out.println("最小公倍数为:");				
		break;		
		}	
	}
}
/*输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身	例如:153=1*1*1+3*3*3+5*5*5*/
import java.util.Scanner;
class ForTest2{	public static void main(String[] args){
		int a,b,c,s;
			for(i = 0;i <= 100;i++){
				c=i%10;
				b=(i/10)%10;
				a=i/100;	
		if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==i)
			}
			System.out.println(""+i);	
		}
	}

while循环

① 初始化条件
② 循环条件 (条件是boolean类型)
③ 循环体
④ 迭代条件

while循环结构

while(){;;
}

执行过程:① -> ② -> ③ -> ④ -> ② -> ③ -> ④ … -> ②

说明

  • 写while循环千万小心不要丢了迭代条件。一旦丢了,就可能导致死循环!
  • 写程序时,要避免出现死循环,算法要具有有限性。
  • for循环和while循环时可以相互转换的
    区别:for循环和while循环的初始化条件部分的作用范围不同。
class WhileTest{
public static void main(String[] args){
//遍历100以内的所有偶数
	int i = 1;
		while(i <= 100){
			if(i % 2 ==0){
					System.out.println(i);
			}
			i++;
		}
	//出了while循环后,仍可以调用i(for循环和while循环的区别)	
		System.out.println(i);// i=101
	}
}

do-while循环

① 初始化条件
② 循环条件 (条件是boolean类型)
③ 循环体
④ 迭代条件

do-while循环结构

do{;;
}while();

执行过程:① -> ③ -> ④ -> ② -> ③ -> ④ … -> ②

说明:

  • do-while循环至少会执行一次循环体
  • 开发中,使用for和while循环更多些,较少使用do-while
class DoWhileTest{
	public static void main(String[] args){
		//遍历100以内的偶数,并计算所有偶数的和以及偶数的个数
		int num = 1;
		int sum = 0;//记录总和
		int count = 0;//记录个数
		do{
			if(num % 2 == 0){
				System.out.println(num);
				sum += num;
				count++;
			}
			num++;
		}while(num <= 100);
	}
	System.out.println("总和为:"+sum);
	System.out.println("个数为:"+count);
}

while(true)结构的使用

题目:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序

import java.util.Scanner;

class ForWhileTest{
	public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		
		int positiveNumber = 0;    //记录正数的个数
		int negativeNumber = 0;    //记录负数的个数
		
		while(true){                     //for(;;)
			int number = scan.nextInt();
			
			//判断number的正负情况
			if(number >0 ){
				positiveNumber++;
			}else if(number < 0){
				negativeNumber++;
			}else{
				break;
			}
		}
		System.out.println("输入正数有:"+positiveNumber);
		System.out.println("输入负数有:"+negativeNumber);

	}
}

说明:

  • 不在循环条件部分限制次数的结构:for(;;)或while(true)
  • 循环结束的方式:
    1、循环条件部分返回false
    2、在循环体中,执行break
  • 建议不要在循环体中改变循环变量的值,否则会增加出错的可能性。(需要修改的情况下,重新定义一个临时变量)

注意

for循环和while、do-while有区别:while、do-while的循环迭代语句紧跟着循环体,如果循环体不能完全执行(如用continue结束本次循环),循环迭代语句是不会被执行的。但for循环的迭代语句并没有与循环体放在一起,因此不管是否使用continue语句来结束本次循环,迭代语句一样会获得执行。

嵌套循环

嵌套循环的使用

  • 将一个循环结构A声明在另一个循环结构B的循环体中,就构成了循环嵌套
  • 外层循环就是循环结构B,内层循环就是循环结构A
  • 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
  • 外层循环执行m次,内层循环执行n次,此时内层循环的循环体一共执行了m*n次。

嵌套循环联系

九九乘法表
1 × 1 = 1
2 × 1 = 2 2 × 2 = 4

9 × 1 = 9 … 9 × 9 = 81

class NineTable{
	public static void main(String[] args) {

		for(int i = 1;i <= 9;i++){
			for(int j = 1;j <= i;j++){

				System.out.print(i+"×"+j+"="+(i*j));

			}
			System.out.println();
		}
		
	}

}

100以内所有质数
质数:素数,只能被1和他本身整除的自然数

class PrimeNumberTest{   //质数
	p	public static void main(String[] args) {
		
		
		
		for(int i = 2;i <= 100;i++){ //遍历100以内的自然数
			boolean isFlag = true;
			for(int j = 2;j < i;j++) { //和i做除法
				
				if(i % j == 0) {
					isFlag = false;
				}
				
			}
			if(isFlag == true) {
				System.out.println(i);	
			}
		}
		
	}
}

优化算法

public class PrimeNumberTest1 {

	public static void main(String[] args) {
		
		//获取当前时间距离1970-01-01 00:00:00的距离
		long start = System.currentTimeMillis();
		
		int count = 0;
		
		for(int i = 2;i <= 10000;i++){ //遍历100以内的自然数
			boolean isFlag = true;
			for(int j = 2;j <= Math.sqrt(i);j++) { //和i做除法
				
				if(i % j == 0) {
					isFlag = false;
					break;//优化1:只对本身非质数的自然数有效
				}
				
			}
			if(isFlag == true) {
				//System.out.println(i);
				count++;
			}
		}

		//获取当前时间距离1970-01-01 00:00:00的距离
		long end = System.currentTimeMillis();
		System.out.println(count);
		System.out.println(end-start);
	}

}

?

如何从键盘获取变量

具体实现步骤:

  1. 导包:import java.util.Scanner;
  2. Scanner的实例化:Scanner scan = new Scanner(System.in);
  3. 调用Scanner类的相关方法,来获取指定类型的变量。

注意
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常,导致程序终止。

import java.util.Scanner;

class ScannerTest{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入任意整数:");
		int num = scan.nextInt();
		System.out.println(num);
	}
}
  • 对于char型的获取,Scanner没有提供相关方法,只能获取一个字符串。

如何获取一个随机数

公式:[a,b] (int)(Math.random() * (b - a + 1) + a);

//获取10-90的随机数
int value = (int)(Math.random() * 90 + 10);

获取字符串对应位置的字符

String gender = scan.next();//输入字符串
char genderChar = gender.charAt(0);//获取所以为0位置上的字符,实际为输入字符串第一个字符
System.out.println(genderChar);//输出获取的字符
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:45:54  更:2021-09-19 07:47:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 7:11:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码