Java{6day}-【控制语句、方法、递归算法】

控制语句

 if 单分支结构 

语法结构:

if(布尔表达式){

        语句块;

/**
 * @ClassName TestIf01
 * @Description 测试if语句,一个简单的骰子游戏。
 * @Author LHY
 * @Date 2021-6-28 9:44
 * @Version 1.0
 **/
public class TestIf01 {

    public static void main(String[] args){

        //double d = Math.random();   //Math.random()生成[0.1)之间的随机数

        int a = (int)(Math.random()*6)+1;   //生成了[1,6)之间的随机数
        int b = (int)(Math.random()*6)+1;
        int c = (int)(Math.random()*6)+1;

        int count = a+b+c;   //三次骰子数总会

        if(count >= 15 ){

            System.out.println("今天手气不错");
        }

        if (count >=10 && count < 15){

            System.out.println("今天手气一般");
        }

        if (count < 10){

            System.out.println("手气不太行");
        }
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println("总共得了"+count+"分");
    }
}

if - eslse双分支结构

语法结构:

if(布尔表达式){

        语句块1;

}else{

        语句块2;

}


/**
 * @ClassName TestIfElse
 * @Description if - else 双分支结构
 * @Author LHY
 * @Date 2021-6-28 10:11
 * @Version 1.0
 **/
public class TestIfElse {

    public static void main(String[] args){

        //随机产生yg[0.0,4.0)区间的半径,并根据半径求圆的面积和周长
        double r = Math.random()*4;      //生成一个[0.0,4.0)之间的半径
        //System.out.println(r);
        double P = 3.14;       //定义一个π

        double c = 2*P*r;      //周长
        System.out.println("半径为"+r+"的圆,其周长为"+c);

        double s = P*r*r;     //面积
        System.out.println("半径为"+r+"的圆,其面积为"+s);

        //如果面积>=周长,则输出“面积大于等于周长”,否则,输出周长大于面积
        if(s >= c){

            System.out.println("面积大于等于周长");
        }else{

            System.out.println("周长大于面积");
        }


    }
}

 if -else if -else多分支结构

语法结构: 

if(布尔表达式1){

        语句块1;

} else if(布尔表达式2){

        语句块2;

}else{

        语句块n+1;

}

/**
 * @ClassName TestIfElseIfElse
 * @Description if else if else 多分支结构
 * @Author LHY
 * @Date 2021-6-28 10:30
 * @Version 1.0
 **/
public class TestIfElseIfElse {

    public static void main(String[] args) {

        //随机产生yg[0,100)之间的随机年龄
        int age = (int)(Math.random()*100);
        System.out.print(age+"属于");

        //根据年龄判断年龄阶段
        if (age < 15){
            System.out.println("儿童,就是玩");
        }else if(age < 25){
            System.out.println("青年,努力吧");
        }else if (age < 45){
            System.out.println("中年,要保养");
        }else if(age < 65){
            System.out.println("中老年,注意身体");
        }else if(age < 85){
            System.out.println("老年,子孙满堂");
        }else{
            System.out.println("福如东海,寿比南山");
        }
    }
}

switch语句

语法结构:

switch(表达式){

        case 值1:

                语句序列1;

                break;

        case 值2:

                语句序列2;

                break;

        default:

                默认语句;

}

/**
 * @ClassName TestSwitch
 * @Description switch语句
 * @Author LHY
 * @Date 2021-6-28 10:59
 * @Version 1.0
 **/
public class TestSwitch {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //输入大学年级
        System.out.println("请输入你的大学年级:");

        String geade = scanner.next();

        //使用switch来判断年级状态
        switch (geade){
            case "大一" :
                System.out.println("大一,刚入学可以玩一下,多交朋友");
                break;
            case "大二" :
                System.out.println("大二,参加活动冲");
                break;
            case "大三" :
                System.out.println("大三,好好学习明确方向");
                break;
            case "大四" :
                System.out.println("奋勇向前,冲");
                break;
            default:
                System.out.println("什么家里蹲大学");
                break;
        }
    }
}
/**
 * @ClassName TestSwitch01
 * @Description switch小练习
 * @Author LHY
 * @Date 2021-6-28 11:12
 * @Version 1.0
 **/
public class TestSwitch01 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        //输入一个月份
        System.out.println("请输入当前月份");
        String month = scanner.next();

        switch(month){
            //春季
            case "三月" :
            case "四月" :
            case "五月" :
                System.out.println("春季");
                break;

            //夏季
            case "六月" :
            case "七月" :
            case "八月" :
                System.out.println("夏季");
                break;

            //秋季
            case "九月" :
            case "十月" :
            case "十一月" :
                System.out.println("秋季");
                break;

            //冬季
            case "十二月" :
            case "一月" :
            case "二月" :
                System.out.println("冬季");
                break;

            //其他
            default:
                System.out.println("你别乱输入");
        }

    }
}

while循环

语法结构:

while(布尔表达式){

        循环体;

}

/**
 * @ClassName TestWhile
 * @Description TODO
 * @Author LHY
 * @Date 2021-6-28 14:23
 * @Version 1.0
 **/
public class TestWhile {

    public static void main(String[] args) {

        int a = 0;
        int sum = 0;

        /*while (a<=3){
            System.out.println("Four The One");
            a++;
        }*/
        //1-100累加
        while (a<=100){
            sum += a;//sum = sum+a;
            a++;
        }

        System.out.println(sum);
    }
}

 do while 循环

语法结构:

do{

        循环体

}while(布尔表达式);

/**
 * @ClassName TestDoWhile
 * @Description TODO
 * @Author LHY
 * @Date 2021-6-28 14:41
 * @Version 1.0
 **/
public class TestDoWhile {

    public static void main(String[] args) {

        int a = 0;
        while(a<0){

            System.out.println("----");
        }

        do {
            System.out.println("---");
        }while (a<0);
    }
}

 循环结构 for

语法结构:

for(初始表达式;布尔表达式;迭代因子){

        循环体;

}

/**
 * @ClassName TestFor
 * @Description 使用for循环,打印出a-z的26个字母
 * @Author LHY
 * @Date 2021-6-28 15:30
 * @Version 1.0
 **/
public class TestFor {

    public static void main(String[] args) {

        char az = 'a';

        for (int i=0;i<26;i++,az++){
           
            System.out.print(az+"\t");

        }
    }
}

嵌套循环

在一个循环语句内部再嵌套一个或多个循环,称为嵌套循环。while、do-while 与 for 循环可以任意嵌套多层。一般工作中多见的就是两层。 

/**
 * @ClassName TestLoop02
 * @Description 九九乘法表
 * @Author LHY
 * @Date 2021-6-28 17:10
 * @Version 1.0
 **/
public class TestLoop02 {

    public static void main(String[] args) {
        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();
        }
    }
}
/**
 * @ClassName TestLoop
 * @Description 嵌套循环
 * @Author LHY
 * @Date 2021-6-28 16:54
 * @Version 1.0
 **/
public class TestLoop {

    public static void main(String[] args){
        for(int i = 1;i<=5;i++){
            for(int j = 1;j<=5;j++){

                System.out.print(i+"\t");
            }

            System.out.println();
        }
    }
}

 break语句和continue语句

 break:在任何循环语句的主体部分,均可用 break 控制循环的流程。break 用于强行退出循 环,不执行循环中剩余的语句。

/**
 * @ClassName TestRandomNum
 * @Description 生成 0-100 随机数,直到生成 88 为止,停止循环
 * @Author LHY
 * @Date 2021-6-28 21:01
 * @Version 1.0
 **/
public class TestRandomNum {

    public static void main(String[] args) {
        for (;;){
            int num = (int)(Math.random()*100);
            System.out.println("现在的随机数是:"+num);
            if (num==88){
                System.out.println("当前随机数为:"+num+"停止循环");
                break;
            }
        }
    }
}

 

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

public class Test17 {
public static void main(String[ ] args) {
int count = 0;//定义计数器
for (int i = 100; i < 150; i++) {
//如果是 3 的倍数,则跳过本次循环,继续进行下一次循环
if (i % 3 == 0){
continue;
}
//否则(不是 3 的倍数),输出该数
System.out.print(i + "、");
count++;//没输出一个数,计数器加 1
//根据计数器判断每行是否已经输出了 5 个数
if (count % 5 == 0)
{ System.out.println();
}
}
}
}

注意事项

  • continue 用在 while,do-while 中,continue 语句立刻跳到循环首部,越过了当前循 环的其余部分。
  • ontinue 用在for循环中,跳到for循环的迭代因子部分。

 

方法

 方法(method)就是一段用来完成特定功能的代码片段,类似于其它语言的函数(function)

方法声明格式:

[修饰符1  修饰符2  ....]   返回值类型    方法名(形式参数){

        java语句;... ... ...

}

方法的调用方式:

对象名.方法名(实参列表)

方法的详细说明: 

  • 形式参数:在方法声明时用于接收外界传入的数据。
  • 实参:调用方法时实际传给方法的数据。
  • 返回值:方法在执行完毕后返还给调用它的环境的数据。
  • 返回值类型:事先约定的返回值的数据类型,如无返回值,必须指定为void。

注意事项: 

  1. 实参的数目、数据类型和次序必须和所调用的方法声明的形式参数列表匹配。
  2.  return 语句终止方法的运行并指定要返回的数据。
  3. Java 中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本):
  • 基本类型传递的是该数据值的 copy 值。 
  • 引用类型传递的是该对象引用的 copy 值,但指向的是同一个对象。
/**
 * @ClassName TestDrawingMethod
 * @Description 将打印实心正方形和空心正方形封装成方法
 * @Author LHY
 * @Date 2021-6-29 23:08
 * @Version 1.0
 **/
public class TestDrawingMethod {
    //打印实心正方形
    public static void RealSquare(int a){
        for (int i = 1;i<=a;i++) {
            for (int j = 1; j <=a; j++){
                System.out.print("*\t");
            }
            System.out.println();
        }

    }
    //打印空心正方形
    public static void EmptySquare(int a){
        for (int i = 1;i<=a;i++){
            for (int j =1;j<=a;j++){
                if(i==1||i==a){
                    System.out.print("*\t");
                }else if (j==1||j==a){
                    System.out.print("*\t");
                }else{
                    System.out.print("\t");
                }
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        System.out.println("-------------打印实性正方形-------------");
        RealSquare(10);
        System.out.println("-------------打印空心正方形-------------");
        EmptySquare(10);

    }
}

方法的重载(overload) 

 方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会 根据不同的参数自动匹配对应的方法。

重载的方法,实际是完全不同的方法,只是名称相同而已!

 构成方法重载的条件:

  •  不同的含义:形参类型、形参个数、形参顺序不同
  • 只有返回值不同不构成方法的重载,如:int a(String str){}与 void a(String str){}不构成方法重载
  • 只有形参的名称不同,不构成方法的重载,如:int a(String str){}与 int a(String s){}不构成方法重载
public class Test21 {
public static void main(String[ ] args)
{ System.out.println(add(3, 5));// 8
System.out.println(add(3, 5, 10));// 18
System.out.println(add(3.0, 5));// 8.0
System.out.println(add(3, 5.0));// 8.0
// 我们已经见过的方法的重载
System.out.println();// 0 个参数
System.out.println(1);// 参数是 1 个 int
System.out.println(3.0);// 参数是 1 个 double
}
/** 求和的方法 */
public static int add(int n1, int n2) {
int sum = n1 + n2;
return sum;
}
// 方法名相同,参数个数不同,构成重载
public static int add(int n1, int n2, int n3) {
int sum = n1 + n2 + n3;
return sum;
}
// 方法名相同,参数类型不同,构成重载
public static double add(double n1, int n2) {
double sum = n1 + n2;
return sum;
}
// 方法名相同,参数顺序不同,构成重载
public static double add(int n1, double n2) {
double sum = n1 + n2;
return sum;
}
//编译错误:只有返回值不同,不构成方法的重载
public static double add(int n1, int n2) {
double sum = n1 + n2;
return sum;
}
//编译错误:只有参数名称不同,不构成方法的重载
public static int add(int n2, int n1) {
double sum = n1 + n2;
return sum;
    }
}

 

/**
 * @ClassName TestLeat
 * @Description 定义一个方法处理迟到问题
 *              (1)输入参数:迟到时间,月薪。
 *              (2)逻辑处理
 *              1.迟到1-10分钟,警告
 *              2.迟到11-20分钟,罚款100元
 *              3.迟到21-30分钟,罚款200元
 *              4.迟到30分钟以上,扣除半日工资
 *              5.迟到1小时以上,按照旷工计算,扣除3日工资
 *              (3)输出罚款金额
 * @Author LHY
 * @Date 2021-6-29 21:56
 * @Version 1.0
 **/
public class TestLeat {

    public static int Leat(int leatMinute, int monthlySalary){
        int fineMoney = 0;   //罚款

        if (leatMinute<11){
            System.out.println("迟到!!警告!!");
        }else if (leatMinute<21){
            fineMoney = 100;
        }else if (leatMinute<31){
            fineMoney = 200;
        }else if (leatMinute<61){
            fineMoney = (int)(monthlySalary/(21.5*2));
        }else{
            fineMoney = (int)((monthlySalary/21.5)*3);
        }

        return fineMoney;
    }

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入您的迟到时间:");
        int leatMinute = scanner.nextInt();
        System.out.println("输入您的月薪:");
        int monthlySalary = scanner.nextInt();

        System.out.println("迟到"+leatMinute+"罚款"+Leat(leatMinute,monthlySalary)+"元");

    }
}

递归结构介绍:

递归的基本思想就是“自己 调 用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。

利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺 塔、快排等问题。

递归结构包括两个部分:

  • 定义递归头:解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就 是递归的结束条件。
  • 递归体:解答:什么时候需要调用自身方法。

 注意事项

  • 任何能用递归解决的问题也能使用迭代解决。当递归方法可以更加自然地反映问题,并 且易于理解和调试,并且不强调效率问题时,可以采用递归。
  • 在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

递归的缺陷 

简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递 归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

/**
 * @ClassName TestRecursion
 * @Description 使用递归算法完成阶乘:1!+2!+3!+4!+5!
 * @Author LHY
 * @Date 2021-6-29 23:24
 * @Version 1.0
 **/
public class TestRecursion {

    public static long Recursion(int n){
        if (n==1){
            return 1;
        }else{
            return n*Recursion(n-1);
        }
    }

    public static void main(String[] args) {
        long sum = 0;
        for (int i=1;i<=5;i++){
            sum += Recursion(i);
        }

        System.out.println(sum);

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值