07-流程控制和循环结构

在这里插入图片描述

语句是程序的基本组成单元,一个软件就是一组语句的有序集合。

按照结构划分语句有三种形式:顺序结构、分支结构、循环结构。

一、流程控制(条件分支)


目的:满足某些条件的时候才执行一段代码。
条件分支有两种语句:if 、switch 。if 用的最多,可以代替 switch 。

1、IF 语句

第一种 IF:

if(表达式)
{
   语句块 
}
  • 语句可以是单行语句,也可以是复合语句;

  • 如果是单行语句,{}可以省略,但最好不要省略;

  • 整个 if 是一个逻辑语句,因此不能直接在 if 后面加分号。

例如:

int age = 19;
if (age>18)
{
    System.out.println("到达主战场");
}

第二种IF:

if(表达式)
{
    语句1
}
else
{
    语句2
}   

例如:

int score = 80;
if (score >= 60) {
   	 	System.out.println("合格");
    } else {
  	 	 System.out.println("尚未合格");
	}
}

第三种IF:

if(表达式1)
{
    语句1;
}
else if(表达式2)
{
    语句2;
}
...
else
{
    语句n;
}    

有点像一给我里giao giao,那鬼东西。

例如:

int score = 1011;
if (score <60)
{
    System.out.println("不及格");
} 
else if(score>= 60&& score <70 )
{
    System.out.println("及格");
}
else  if (score>=70&&score<80)
{
    System.out.println("一般");
}
else  if (score>=80&&score<90) 
{
    System.out.println("中等");
}
else
{
    System.out.println("优秀");
}

IF 嵌套:

if(表达式1){
    if(表达式2){
        语句1;
    }else{
        语句2;
    }
}else{
     语句3;
}

2、SWITCH 语句

语法:

switch(条件表达式) 
{
    case 条件1:
        语句1;
        break;
    case 条件2:
        语句2;
        break;
        ...
    default:
        语句;
}
  • switch语句中的变量类型可以是:byte、short、int或者char。
  • 从jdk7开始,switch支持字符串string类型了,同时case标签必须为字符串常量或者字面量(用于表达源码中一个固定值的表示法)。

二、循环结构


目的:反复执行N次(或一直执行)某段代码。比如我们体测跑圈哈哈哈/(ㄒoㄒ)/~~

1、 WHILE 循环

while循环语法:

while(条件表达式)
{
    循环体
}

先判断条件表达式,如果为ture就执行循环体,执行完循环体再判断条件表达式......,直到条件表达式为false时结束循环

在这里插入图片描述
例如:

// 从10倒数到0
int i = 10;
while (i>=0)
{
    System.out.println("白豆五"+i);
    i--;
}
System.out.println("while结束");

控制台输出:
白豆五10
白豆五9
白豆五8
白豆五7
白豆五6
白豆五5
白豆五4
白豆五3
白豆五2
白豆五1
白豆五0
while结束

// 统计0到10的和
int j = 0;
int sum = 0; //创建一个临时变量用于加和操作
while (j <= 10)
{
    sum += j;
    j++;
}
System.out.println(sum); //55


// 用while循环实现:从5打印到11
int y = 5;
while(y <= 11)
{
    System.out.println(y);
    y++;
}

do-while循环语法:

do{
    循环体    
}while(条件表达式);

两者的区别:while先判断后执行,do-while是先执行后判断。


2、 FOR 循环

既 WHILE 何生 FOR

  • while 、do…while 、for 都可以实现循环,可以互换。
  • 不同的需求,用不同语法难易程度不同。
  • 使用频率:for > while > do…while 。

for循环语法:

for(表达式1;表达式2;表达式3)
{
    循环体;
}

(1)先执行表达式1,只会执行一次。
(2)执行表达式2,如果该表达式2结果为真,执行for循环体,然后执行下面第(3)部。如果为假,直接结束for循环。   
(3)执行表达式3,然后跳到第(2)步重新执行。

在这里插入图片描述
用while表示for:

表达式1;
while(表达式2)
{
    循环体;
    表达式3;
}    

例如:

for (int i=1;i<=10;i++)
{
    System.out.print(i+"\t"); // 1 2 3 4 5 6 7 8 9 10
}

// 第二种声明
int j = 0;  //将之前for循环内部的局部变量,丢到循环体外面相当于提权,然后都可以调用这个变量。
for(;j<=3;j++)
{
    System.out.println(j);
}

// 用while等价for
int i = 0;
while (i <= 10) 
{
    System.out.println(i);
    i++;
}


// 从10倒数到0
for (int i = 10; i >= 0; i--) {
    System.out.print(i + "\t");
}

// 统计0到10的和
int sum = 0;
for (int i = 0; i <= 10; i++) {
    sum += i;
}
System.out.println(sum);

// 打印2 4 6 8 10
for (int y = 2; y <= 10; y = y + 3) {
    System.out.println(y);
}


for-each语句:

for(数据类型type 变量x:遍历对象obj){
	引用变量x的java语句;
}

3、 循环嵌套

  • 循环嵌套:循环里套着循环。此套娃非彼套娃。嵌套循环可以是嵌套n层,一般也就用两层。

  • 三种循环(while、do…while、for)可以相互嵌套,不过使用最多的是for循环嵌套。

在这里插入图片描述
例如:

// 循环打印99乘法表
for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j + "*" + i + "=" + (i * j) + "\t");
    }
    System.out.println();
}

1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81
// 力扣27题通过双指针来移除数组中的元素
/*
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

*/
public int removeElement(int[] nums, int val) {
    if (nums == null || nums.length == 0) {
        return 0;
    }
    int l = 0;
    int r = nums.length - 1;
    while (l < r) {
        while (l < r && nums[l] != val) {
            l = l + 1;
        }
        while (l < r && nums[r] == val) {
            r = r - 1;
        }
        int temp = nums[l];
        nums[l] = nums[r];
        nums[r] = temp;
    }
    System.out.println(Arrays.toString(nums));
    return nums[l] == val ? l : l + 1;
}

// 优解
public int removeElement(int[] nums, int val) {
    if (nums == null || nums.length == 0) {
        return 0;
    }
    int j = 0;
    for(int i= 0;i<nums.length;i++){
        if(nums[i]!=val){
            int temp = nums[i];
            nums[i]=nums[j];
            nums[j]=temp;
            j++;
        }
    }
    return j;
}

4、BREAK和CONTINUE

  • break 和 continue都可以和while、do…while、for 一起用。
  • break:强制结束循环。
  • continue:不再执行本次循环后面的代码,然后进行下一次循环。

例如:

//break
for (int i=0;i<=5;i++){
    if (i==3){
        break;
    }
    System.out.println(i);
}
打印结果:
0
1
2

// continue    
for (int i=0;i<=5;i++){
    if (i==3){
        continue;
    }
    System.out.println(i);
}
打印结果:    
0
1
2
4
5    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白豆五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值