04 循环控制语句

时间:2022-09-08 16:55:11
for循环   
•for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
•语法形式
• for (初始表达式;布尔表达式;步进) {
–循环体;
•}
•注意事项
–for循环在执行条件测试后,先执行程序部分,再执行步进。
–在for语句的初始化部分声明的变量,其作用域为整个for循环体
–“初始化”和“循环条件表达式”部分可以使用逗号来执行多个操作
–如果三个部分都为空语句(分号不能省),相当于一个无限循环

跳转语句---break和continue    
•在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句还可用于多支语句switch中)

•continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

跳转语句---return
return语句从当前方法退出,返回到调用该方法的语句处,并从该语句的下条语句处继续执行程序。

返回语句的两种格式(具体到方法时详细讲解)
1、return expression
返回一个值给调用该方法的语句。
返回值的数据类型必须和方法声明中的返回值类型一致或是精度低于声明的数据类型。
2、return
当方法声明中用void声明返回类型为空时,应使用这种返回类型,它不返回任何值。
•break –switch语句–循环语句
 •continue  –循环语句
•return–任何语句中,结束当前方法,和循环其实没有什么关系
•Continue 只能用于循环中  while do-while 执行了continue 以后 代码回到执行判断的地方,重新判断是否决定下一次执行
•在for循环中执行continue 直接跳到i++迭代处

多重循环(循环嵌套)
一个循环体内又包含另一个完整的循环结构 
任何两种循环都可以相互嵌套
可以任意层次循环,但是一般不超过3层
多重循环执行过程
外层循环变量变化一次,内层循环变量要变化一遍
package duochongxunhuan;

import java.awt.Choice;
import java.util.Scanner;

/**
 * 有5家衣服专卖店,每家最多购买3件。用户可以选择离开,可以买衣服。最后打印总共买了几件衣服

思路
外层循环控制去每个专卖店
内层循环控制买衣服过程
使用break退出内层循环

 * @author Administrator
 *
 */

public class BreakDemo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int count = 0;
        for (int i = 1;i < 5; i++){
            System.out.println("欢迎光临第"+ i +"家专卖店");
            for(int j = 0;j < 3;j++ ){
                System.out.print("要离开吗?(y/n)?");
                String choice  = input.nextLine();
                if("y".equals(choice)){
                    break;
                }
                System.out.println("买了一件衣服");
                count++;
            }
            System.out.println("离店结账");
            System.out.println(" ");
        }
        System.out.println("总共买了"+count+"件衣服");
    }

}


package duochongxunhuan;

import java.util.Scanner;

/**
 * 3个班级各4名学员参赛,计算每个班级参赛学员平均分,统计成绩大于85分学员数

思路
外层循环控制班级
内层循环控制某个班级的每名学生
成绩不大于85,continue
成绩大于85,学员数加1

 * @author Administrator
 *
 */

public class continueDemo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = 0 ;
        int score[] = new int[4];
        for(int i = 0;i < 3;i++){
            int sum = 0;
            double avg = 0;
            System.out.println("请输入第"+ (i+1) +"个班级的成绩:");
            for (int j = 0;j < 4;j++){
                System.out.println("第"+ (j+1) + "个学员的成绩:");
                score[j] =input.nextInt();
                sum = sum + score[j];
                avg = sum/4.0;
                if(score[j] > 85){
                    a++;
                }
            }
            System.out.println("第"+ (i+1)+"个班的参赛学员的平均分是:"+avg+"\n");
        }
        System.out.println("成绩85分以上的学员人数有" + a + "人");
    }

}


package Test;

/**
 * 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
 * .................
 * @author Administrator
 *
 */

public class Test99 {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + j * i + "\t");
            }
            System.out.println();
        }
    }

}




•什么是方法
–封装在一起来执行操作语句的集合,用来完成某个功能操作
–在某些语言中称为函数或者过程
–特殊的方法main,程序执行的入口
public static void main(String  [ ] args){
实现功能的语句
}
–不可能所有的功能都放到main中,需要定义其他方法完成指定功能,需要时调用方法即可
package Test;
/**
 * 2.判断1-100之间有多少个素数并输出所有素数。
 * (将判断一个数是否是素数的功能提取成方法,
 * 在循环中直接调用即可)
 */
public class sushuDemo {
    public static void main(String[] args) {
        int count = 0;
        for (int i =1; i<= 100;i++){
            if(isPrime(i)){
                System.out.println(i);
                count++;
            }
        }
        System.out.println("1~100的素数的总数是:"+count);
        }
    public static boolean isPrime(int num){
        boolean flag =true;
        int count = 0;
        int i = 2;
        if(num ==1){
            flag = false;
        }else{
            for(i =2;i <=Math.sqrt(num);i++){
                if(num%i == 0){
                    flag = false;
                    return flag;
                }
            }
        }
        return flag;    
    }
}

修饰符:封装性时再讲,决定了方法的工作范围
返回值类型:必选,如果没有返回值,须写void。方法只能返回一个值
方法名:
参数列表:可以0个、1个、多个,需要同时说明类型。称为形式参数
方法体:完成具体功能。如果有返回值,必须有return语句;如果没有返回值,默认最后一条语句是return,可以省略。

方法重载:–一个类中可以定义有相同的名字,但参数不同的多个方法
–调用时,会根据不同的参数表选择对应的方法。
•判断依据
–同一个类
–同一个方法名
–不同:参数列表不同(类型,个数,顺序不同)
•注意
–只有返回值不同不构成方法的重载(
  int   a(String str){},
  void  a{String i}
–只有形参的名称不同,不构成方法的重载
•[1]定义方法可以将功能代码进行封装
•[2]方法只有被调用才会被执行
•[3]方法的出现提高了代码的复用性
•[4]方法中只能调用方法,不可以在方法内部定义方法
*[5]定义方法时,方法的结果应该返回给调用者去处理

•什么是递归(recursion)
–程序调用自身的编程技巧称为递归。
–一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法
递归问题的特点
一个问题可被分解为若干层简单的子问题 
子问题和其上层问题的解决方案一致
外层问题的解决依赖于子问题的解决
package Test;
import java.rmi.dgc.DGC;
/**
 * 4.    编写递归算法程序:一列数的规则如下:
 *  1、1、2、3、5、8、13、21、34...... 
 *  求数列的第40位数是多少。
 * @author Administrator
 *
 */
public class digui {
    public static void main(String[] args) {
        System.out.println("结果是:"+Dg(2));
    }
    public static int Dg(int i) {
        if(i <= 0){
            return 0;
        }else if(i>0 && i<= 2){
            return 1;
        }
        return Dg(i-1)+Dg(i-2);
    }
}