Java流程控制

1.顺序结构

定义:顺序结构描述的是Java语句之间,从上到下(或从左到右)依次执行的执行顺序。
执行流程:顺序结构是程序中最简单最基本的流程控制,没有特定的语法,就是按照代码书写的顺序执行。对于顺序结构而言,写在前面的代码先执行,写在后面的代码后执行。

2.选择结构

Java中,选择结构有2种实现形式,if语句 和switch语句。

if语句格式:

if (关系表达式1) {
         语句体1;
   } else  if (关系表达式2) {
         语句体2;
   }else {
         语句体n+1;
    }

switch语句格式:

switch(表达式) {
	    case1:
	         语句体1;
	         break;
        case2:
	         语句体2;
	         break;default:	
	         语句体n+1;
	         break;
}   

switch格式解释:

switch关键字:表示这是一个switch语句
switch后的表达式:表示选择条件
case语句:每个case 语句表示一个分支
beak语句:表示结束switch语句
default语句:表示当所有其他的case的分支,都不能匹配switch后表达式的值的时候,此时就会执行default分支。

注意事项:

①switch语句后,表达式结果的取值范围?
switch后的表达式的结果类型:byte、short、int、char
JDK7以后可以是:String字符串
②case 后的常量取值?
不同case后面的值不能相等,且必须和表达式值类型相同
③break可以省略吗?
可以。但是省略之后会发生case穿越现象
④default可以省略吗?
可以。但无法处理非法情况。

问题:选择结构有两种实现方式,这两种实现方式,各自适用于什么样的使用场景呢?

if的使用场景:

针对结果是boolean类型的判断 ;
分支对应多个表达式的多个取值;

switch的使用场景:

针对结果是固定类型的判断 ;
表达式的取值范围只是固定的离散值集合,分支对应表达式的某一种取值;

3.循环结构

循环结构,从语法上来讲,有3种实现形式:

for语句;
while语句;
do while语句;

但是,不管哪种实现形式,都由4部分组成:

初始化语句
条件判断语句
循环体语句
循环控制语句

①for 循环语句格式:

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

补充:

==for(int i : index)==的意思就是知说,遍历index数组,每次遍历的对象道用内i 这个对象去接收容。
相当于:

int i=0; //用于接收index数组中的某一个对象
for(int j = 0;j<index.length;j++){
      i = index[j];
}

注:

1.在for循环中定义的变量i,其作用域仅仅只在for循环中 ;
2.判断条件语句的结果的数据类型只能是boolean型。

②while循环语句格式:

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

执行流程:

和for循环一模一样

for循环和while循环的联系:

for循环和while循环几乎可以在任何场景下,作等价替换.

for循环和while循环的区别:

直观来说,for循环适合针对一个范围判断进行操作(循环次
数比较明确),while循环适合判断次数不明确操作。

例:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

double height = 0.01;
int count = 0;
while (height < 8848) {
  height *= 2;
  count++;
}

③do …while循环语句格式:

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

执行流程:

1执行初始化语句;
2不管是否满足循环条件,都首先执行一次循环体中的代码 ;
3之后的流程和while循环相同.

3种循环结构的综合比较:

3中循环中,for循环和while循环等价 ;
do …while循环与其他两种循环结构相比,略有不同,因为do…while结构可保证循环体至少执行一次.

注意事项:

实际使用时,只要达到预期的效果,用哪个都可以;
如非特殊情况,要注意不要规避死循环问题,如:
for(; ;)或 while(true).

4.跳转控制语句

定义:在循环执行过程中,控制(终止)循环的执行。

为了实现对循环结构更加细粒度的控制,我们得通过跳转控制语句:

break 中断
continue 继续
return 返回

①break的使用场景:

在选择结构的switch语句中
在循环语句中

break的作用:

1.跳出单层循环(如果有多层循环,只跳出内层)
2.结束switch语句
3. 带标签的跳出(多重循环)
格式:标签名: 循环语句
标签名要符合Java的命名规则

②continue的使用场景:

在循环语句中

continue的作用(必须和if配合使用):

结束本次循环,开始下一次循环

也可以使用标签:

outer:
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
          if( j == 1) {
              continue outer;//此时continue结束的是outer表示的外层循环,此效果和break效果相同
        }
          System.out.println("i = " + i + " -- " + "j = " + j);
      }     
 }

③return的使用场景:

1.return关键字不是为了跳转出循环体 不管有多少层嵌套都全部终止 ;
2.更常用的功能是结束一个方法(函数),也就是退出一个方法;
3.跳转到上层调用的方法。

5.补充

1.根据键盘录入的数值1,2,3,…7输出对应的星期一,星期二,星期三…星期日。

package com.day04;
import java.util.Scanner;

public class demo1 {
   public static void main(String[] args) {
       int day=0;//1~7
       System.out.println("输入数字1~7:");
       Scanner input=new Scanner(System.in);
       day=input.nextInt();
       switch (day){
           case 1:
               System.out.println("周一");
               break;
           case 2:
               System.out.println("周二");
               break;
           case 3:
               System.out.println("周三");
               break;
           case 4:
               System.out.println("周四");
               break;
           case 5:
               System.out.println("周五");
               break;
           case 6:
               System.out.println("周六");
               break;
           case 7:
               System.out.println("周日");
               break;
           default:
               System.out.println("输入错误!");
               break;
       }
   }
}

2.判断一个5位数是否是回文数(比如12321)
个位等于万位
十位等于千位

package com.day04;

import java.util.Scanner;

public class demo2 {
   public static void main(String[] args) {
       int n=0;//存储输入数
       boolean flag=false;//判断是否是回文数
       int length=0;//字符数组长度
       System.out.println("输入一个五位数:");
       Scanner input=new Scanner(System.in);
       n=input.nextInt();
       String s= Integer.toString(n);//整型转String类型
       char ch[]=s.toCharArray();//字符串存入字符数组
       length=ch.length;
       for(int i=0;i<length/2;i++)
       {
           if(ch[i]==ch[length-i-1])
           {
               flag=true;
           }
       }
       if(flag==true)
       {
           System.out.println(n+"是回文数");
       }else{
           System.out.println(n+"不是回文数:");
       }

   }
}

3.利用switch语句,实现对学生分数评级的功能。
程序的输入是一个int类型的变量score,代表学生的分数取值范围[0,100]
当分数范围为 0=< score <60 输出 不及格
当分数范围为 60=< score <70 输出 及格
当分数范围为 70=< score <80 输出 中
当分数范围为 80=< score <90 输出 良
当分数范围为 90=< score <=100 输出 优
提示:可合理利用case穿越

package com.day04;

import java.util.Scanner;

public class demo3 {
   public static void main(String[] args) {
       int score=0;//分数
       System.out.println("输入成绩:");
       Scanner input=new Scanner(System.in);
       score=input.nextInt();
       switch (score/10) {
           case 0:
           case 1:
           case 2:
           case 3:
           case 4:
           case 5:
               System.out.println("不及格");
               break;
           case 6:
               System.out.println("及格");
               break;
           case 7:
               System.out.println("中");
               break;
           case 8:
               System.out.println("良");
               break;
           case 9:
               System.out.println("优");
               break;
           default:
               if (score == 100) {
                   System.out.println("优");
               }else {
                   System.out.println("输入错误");
               }
       }
   }
}

4.在给定的字符数(只包含ascii码表中包含的128个字符)组中找到,第一个只出现一次的字符(假设所给字符数组中一定存在只出现一次的字符)。

package com.day04;
/*
* 双层for循环依次比较每个元素,时间复杂度O(n2)
* */
public class demo4 {
   public static void main(String[] args) {
       int length=0;//字符数组长度
       String str="absdfbaszufbiud";//待检测字符串
       boolean flag=false;//若找到置为true
       char ch[]=str.toCharArray();//字符串转字符数组
       length=ch.length;
       for (int i=0;i<length;i++) {
           char temp = ch[i];
           if(flag==true)
           {
               break;
           }
           for (int j = 0; j < length; j++) {
               if (ch[j] == temp && j!=i) {
                   break;
               }
               if(j==(length-1)) {
                   System.out.println("第一个只出现一次的字符是:" + ch[i]);
                   flag=true;
               }
           }
       }
   }
}

5.在一个整形数组里,除了两个数字之外,其他数字都出现了2次。请写程序找到这两个只出现了一次的数字。

package com.day04;
/*
* 双层循环暴力求解,时间复杂度O(n2).
* 
* */
public class demo5 {
   public static void main(String[] args) {
       int arr[]={2,6,5,8,2,8,9,9,6,7};
       for(int i=0;i<arr.length;i++)
       {
           int temp=arr[i];
           for(int j=0;j<arr.length;j++)
           {
               if(temp==arr[j] && i!=j)
               {
                   break;
               }
               if(j==arr.length-1)
               {
                   System.out.println(arr[i]);
               }
           }
       }
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值