Java 分支语句

方法的重载(@overload)

前提:

  1. 重载的方法是存在于同一个类中 [前提]
  2. 重载的方法的方法名必须相同
  3. 重载的方法的参数列表必须不相同
  4. 重载的方法的返回类型可以不一样,可以一样
public class LoadMethodDemo {
    public static void main(String[] args) {
        add(20);
    }

    public static int add(){
        System.out.println("add -> 100");
        return 100;
    }

    public static void add(int i){
        System.out.println(i);
    }
}

优点就是简化api - 方便调用的.

学会使用api

通过学习java.lang.Math - 数学工具类 - 提供了很多关于数学计算的方式.

package tech.aistar.day03;

/**
 * 本类用来演示: java.lang.Math
 *
 * @author: success
 * @date: 2021/7/19 8:59 上午
 */
public class MathDemo {
    public static void main(String[] args) {
        //绝对值
        int n = Math.abs(-10);
        System.out.println(n);

        //求随机数 - 伪随机的
        //static double random();//[0.0,1.0)之间的随机小数
        System.out.println(Math.random());

        //[1,100]之间随机的整数
        int result = (int) (Math.random()*100+1);//[1,100]
        System.out.println(result);

        //[3,5]之间的随机整数
        int m = (int) (Math.random()*3+3);
        System.out.println(m);

        //求俩个数中的最大值/最小值
        System.out.println(Math.max(10,20));//20

        //笔试填空题 -
        //返回小于或等于参数的最大(最接近正无穷大) double值,等于一个数学整数。
        //floor方法.

        System.out.println(Math.floor(3.5));//3.0
        System.out.println(Math.floor(4.0));//4.0

        System.out.println(Math.floor(-3.5));//-4.0

        //返回参数中最接近的 long ,其中 long四舍五入为正无穷大。

        //Math.floor(a + 1/2)
        System.out.println(Math.round(-3.5));

        //开根
        System.out.println(Math.sqrt(9));//3.0

        //次方
        System.out.println((int)Math.pow(2,3));//8
    }
}

语句

三元操作符

三目运算符

  1. 条件表达式 ? result1 : result2

    表达式为true,结果就是result1,否则结果是result2

  2. 支持无限嵌套的 - 但是不推荐,可读性差

    m ? (表达式?result1:result2):result2

if…else…

  1. if语句单独使用场景

    if(条件){//成立
      //code...
    }
    
  2. {}可以省略的场景

    if(条件)
      //code...
    
    如果if{}中的代码只有1,那么{}可以省略,但是一定要缩进
    
  3. if…else…使用

    if(条件){
      //条件成立
    }else{
      //条件不成立
    }
    
    //如果语句仍然只有一行,{}还是可以省略的
    if(条件)
      //code
    else
      //code..
    
  4. 多条件分支if…else if…else…if … else…

    注意条件是互斥的

  5. if(条件){
      //条件成立
    }else if(条件){
      //条件不成立
    }else if(条件){
      //code
    }else{
       //code..
    }
    
  1. if…else语句可以无限嵌套使用

    if(条件){
      //条件成立
      if(条件){
                      
      }else{
                      
      }
    }else if(条件){
      //条件不成立
      if(条件){
      //条件成立
        }else if(条件){
          //条件不成立
        }else if(条件){
          //code
        }else{
           //code..
        }
    }else if(条件){
      //code
    }else{
       //code..
    }
    

习题

  1. 买奶茶,每第二杯半价,单价是10元.求总价.

    10 5 10 5 10
    
  1. 求某年某月最大天数

switch…case

没有if…else if…else灵活

语法:

switch(变量)/ /byte short int char String enum[枚举类型]
 		//包装类型Byte Short Integer Character
case1:
 //code
 [break];
case2:
 //code
 [break];

case3:
 //code
 [break];

[default:
 //code..
 [break];]
}
  1. 当switch括号中的变量能够匹配到某个case后面的值的时候,那么就会进入到对应的case中去执行里面的程序

  2. 进入到某个case块中执行的过程中,只有遇到break语句才会跳出switch块.如果没有遇到break语句,那么程序会

    自动进入到下一个case块中去执行.

  3. default语句可以省略,也是可以随便放的,推荐放在末尾.如果switch括号中的变量没有匹配到任何的case后面的值

    的时候,那么就会进入到default

循环语句

while

  1. 属于后置循环 - 先判断循环条件是否成立,如果成立,则进入到循环体中,否则不执行循环.
  2. 使用场景:当不知道循环多少次,但是知道循环退出的条件的时候 - 优先选择while循环.

语法:

while(条件){

// 循环体…

}

package tech.aistar.day03;

/**
 * 本类用来演示: while循环
 *
 * @author: success
 * @date: 2021/7/19 10:53 上午
 */
public class WhileDemo {
    public static void main(String[] args) {
        //while可以代替for的使用
        //'a'-'z'
        char c = 'a';
        while(c <= 'z'){
            System.out.println(c);
            c++;
        }
        System.out.println("=====");
        //'A' - 'Z'
        int n = 65;
        while(n<=90){//退出的条件
            System.out.println((char)n);
            n++;
        }

        //1-10
        int m = 1;
        //死循环...
        while(true){
            //死循环的内部一定要有打破循环的语句 - break
            System.out.println(m);
            if(m==10) // 循环退出的条件
                break;
            m++;
        }
    }
}

练习

  1. 求俩个数的最大公约数

    思路:20 12 -> 4  
    
        20 % 12 = 8
        12 % 8 = 4
        8  % 4 = 0    
    
  2. 十进制转换二进制

    
    

for循环

属于后置循环

  1. 单层for

    for(①表达式1;②表达式2;③表达式3){
      //④循环体
    }
    ①表达式1 - 循环过程中的变量的初始化操作.比如int i = 0;
            -  仅仅只会执行1.
    ②表达式2 - 循环退出的条件.比如 i<=10 
             - 至少执行1次
    ③表达式3 - 循环过程中,变量因子的变化.i++
             - 有可能是不执行,可能执行
    
    执行顺序①-[成立]---[成立]--.....
    

    怪异的写法

    for(;;){
      //死循环 - break打破循环的语句
    }
    三个表达式都是可以任意的省略不写,或者写到其他地方
    

    for循环的复合形态

    for(同时定义若干个变量;条件;表达式){
      //循环体...
    }
    
  2. 嵌套for循环,嵌套的层数不建议超过三层.嵌套越多,性能越低.

    2-1. 内外层无关 - 里面的for选中的使用可以单独执行.没有使用到外面for的循环的变量因子的.

    2-2. 内外层相关 - 里面的for使用到了外面for循环的变量因子的

  3. 练习 - 打印所有的三位数.三位数由数字1,2,3,4组成.但是不能出现重复的.

    每打印4个换一行

    package tech.aistar.day03;
                      
    /**
     * 本类用来演示:
     * 练习 - 打印所有的三位数.三位数由数字1,2,3,4组成.但是不能出现重复的.
     *
     * 每打印4个换一行
     *
     * @author: success
     * @date: 2021/7/19 2:26 下午
     */
    public class ForExerciseDemo {
        public static void main(String[] args) {
            //定义一个计数器
            int count = 0;
            for (int x = 1; x <=4 ; x++) {
                for (int y = 1; y <=4; y++) {
                    for (int z = 1; z <=4; z++) {
    //                    System.out.print(x+""+y+z);
                        if(x!=y & x!=z & y!=z){
                            System.out.print(x*100+y*10+z+"\t");
                            count++;
    //                        if(count % 4==0){
    //                            System.out.println();
    //                        }
                      
                            if(count == 4){
                                System.out.println();
                                count = 0;
                            }
                        }
                      
                    }
                }
            }
        }
    }
    

do…while…

属于前置循环 - 无论循环条件是否成立,优先先进入到循环体中执行一次.

然后再进行判断条件,决定下一次是否再次进入.

do{

//循环体…

}while(条件);

break语句

  1. break可以跳出swtich块
  2. break可以打破它所在的那一层循环

continue语句

出现在循环体中

跳过本轮循环,继续执行下一轮循环.

数组

  1. 数组的诞生 - 为了解决单个变量只能存储单个值的缺点.
  2. 数组本身也是属于数据结构[数组,栈,堆,树[红黑树],链表,图…]
  3. 数组是属于对象类型,数组是存在在JVM内存的堆区,基本类型存储在JVM内存的栈区
  4. 数组在内存中一定是一块连续的空间.
  5. 数组的大小[长度,数组中存放的数据的个数]一旦确定了,不能改变.

语法

1. 元素类型[] 变量名 = new 元素类型[size];//size数组的大小
2. 元素类型 变量名[] = new 元素类型[size];//

元素类型就是数据类型[8种基本数据类型,以及对象类型]
作用 - 元素类型决定了这个数组中可以存放的数据的类型

//arr的数据类型是什么?int[] -> 整数型数组
// "定义一个长度为3的int型数组"
int[] arr = new int[3];

赋值方式

如果定义了数组,但是没有进行赋值操作,那么系统会默认分配一个默认值

默认值根据元素类型来决定了.

byte,short,int,long -> 0

float,double -> 0.0

boolean -> false

char -> 空格

对象类型 -> null

  1. 先定义数组,然后通过下标一一赋值

    int[] arr = new int[3];
    //数组的下标从[0,数组长度-1]范围
    //如果下标不在此范围,控制台抛出java.lang.ArrayIndexOutOfBoundsException 数组下标越界异常
    arr[0] = 10;
    arr[1] = 10;
    arr[2] = 10;
    
  1. 定义数组的同时进行赋值
int[] arr = {3,4,5};
  1. 定义数组的同时进行赋值
int[] arr = new int[]{3,4,5};
  1. 通过普通for去赋值
int[] arr = new int[3];
for(int i=0;i<arr.length;i++){
  arr[i] = (int)(Math.random()*100+1);
}

数组的遍历

  1. 通过下标一一取值

    System.out.println(arr[下标]);
    
  2. 数组提供了属性length - 获取数组的长度

    通过普通for循环进行遍历

    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
    
  3. 使用jdk5.x提供的增强for循环的语法

    属于只读的for

    int[] arr2 = {3,4,5};
    for(元素类型 元素变量:数组变量名){
        System.out.println(元素);
    }
    for(int e:arr2){//此处的e不是代表下标,就是代表真正的元素
        System.out.println(e);
    }
    

拓展 - 数组的内存

//通过new关键字在Jvm的堆中开辟新的空间01,用来存储这个对象{10,20,30}
//然后将这个对象在堆空间中的内存地址赋值给了引用变量arr1[存储在栈]
//"结论" - arr1的本质不是对象,只是一个引用变量而已
//"结论" - 引用和对象之间的关系
//        引用变量中存储的就是对象在堆空间中的内存地址
//        "气球理论" - 一个引用变量在同一个时刻,只能指向一个对象
//                 - "一个对象可以在同一个时刻被多个引用指向"
int[] arr1 = new int[]{10,20,30};

//通过new关键字在Jvm的堆中开辟新的空间02,用来存储这个对象{10,20,30}
int[] arr2 = {10,20,30};

arr1 = arr2;//arr1和arr2都是指向第二次创建出来的数组对象
					  //原来第一次创建出来的对象就成为内存中的垃圾对象 - GC[垃圾回收线程进行回收,释放内存]
					  //"垃圾对象" - 没有任何引用指向的对象

拓展 - 方法的参数传递方式

  1. 基本类型采用值传递
  2. 对象类型[引用类型]采用地址传递

总结:Java中只有值传递,没有地址传递.比较特殊的是String类型[虽然是一个对象类型,但是具备基本类型传递的特点]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值