数学函数,字符和字符串

4.1 函数的定义

1.函数存在的意义:

函数主要解决的是那些重复的且具有独立功能的代码段;

将这些具有独立功能的代码可以进行再次封装 封装出来的东西就成为是函数;

很明先的优势,降低了代码冗余复用函数即可,降低了主函数的代码量,将主函数进行适当的拆分,以便内存优化。

2. 函数的格式:

函数格式:

访问权限 函数类型 返回值类型 函数名(参数列表){

      函数体

      return 返回值;

}

对函数格式里的名词进行解释:

2.1  访问权限:指的就是函数的使用范围(内部和外部)

  • public
  • protected
  • 默认不写
  • private

2.2 函数类型:指的就是函数类型分类,说的就是函数的具体使用场景和场合

  • static   静态函数
  • 默认不写   成员函数
  • abstract   抽象函数
  • native   本地函数
  • synchronized    同步函数

2.3 函数名:就是程序员给这一段代码自定义的名称(标识符)

2.4 参数列表:参数列表有若干个 参数类型,参数名... 组成 主要用于接收外界传递给函数的一些数据

2.5 函数体:就是那些具有独立功能的代码块

2.6 return:仅仅表示结束当前函数,如果有返回值,则函数结束前将返回值返回给调用者
        :发现return不在
        !!!而是因为函数没有返回值 所以return可以忽略不写 不代表不存在
        !!!return本身表示结束当前函数!
        !!!如果函数有返回值 return 返回值; 必须写

2.7 返回值:指的就是这一具有独立功能的代码块的计算结果,需要传递给外界 配合return

2.8 返回值类型:就是返回值的数据类型(可兼容)

4.2 函数的分类

  1. 有返回值有参数
  2. 有返回值无参数
  3. 无返回值有参数
  4. 无返回值无参数

注意:

有返回值的函数,参与运算、输出、赋值;        而无返回值的函数,仅仅调用

定义函数的时候 只需要考虑
    返回值类型 函数名 参数列表 函数体 返回值
    切记:千万不要在函数的内部创建函数, 函数必须在类里面, 函数们之间是平级关系
        在C/C++/Python当中 函数的定义必须在函数调用之前
        在Java当中,函数的定义在函数调用之前,之后都行。

4.3 函数传参

  1. 实际参数-实参就是在调用函数的时候,给函数传递的数据(常量,变量)叫做实参,
  2. 形式参数-形参就是定义函数的时候,参数列表当中的数据,叫做形参,

→→→→那么实参是将什么东西传递给了形参呢?

常量在常量池中的地址;

对象在堆内存中的地址。

局部变量:

但凡是在函数中创建的变量 称之为是局部变量 局部变量的作用域仅仅在当前的函数当中;

形式参数一定是局部变量。

4.4 函数栈

函数的运行是基于栈内存的,

栈是一个先进后出的一个容器结构

    →─  例如:子弹按顺序123456进栈,按顺序出栈654321

可以将每一个函数理解为是子弹(函数帧/栈帧),位于栈顶的函数帧优先运行的主函数绝对是第一个进栈的

return结束当前函数 -> 当前函数弹栈

4.5 函数重载

  1. 函数的重载指的就是同一个类中出现的同名函数
  2. 与权限没关系,与返回值类型没关系,与参数名没关系;只有和参数类型的排列组合有关系(注意一下参数类型的向下兼容问题)
  3. 重载的好处就在于我们可以扩展函数的功能(函数重名,但是参数类型不一样,执行内容也可以不一样)

寻找适当函数的流程

1.看是否有确切的参数定义 int+int 查看是否有(int,int)

2.看是否有可兼容的参数定义 int+int 查看是否有(double,double)

3.如果可兼容的参数定义有多个int+int,(double,int)或(int,double) 此时报错 引用不明确

4.6 函数的递归调用

递归的体现就是函数自身调用函数自身。

→→─→→→递归主要解决什么问题呢?

  1. 一般而言,但凡能够被迭代(循环)解决的问题,递归都可以;而递归解决的问题,迭代就不一定了;
  2. 递归其实是分治法的一种实现方式(一种实现思路)

递归就是函数在进栈,进栈的次数多了,势必会占内存,无法避免的在某些问题上,递归所写的代码要比迭代写的代码少 在某些问题上,迭代是写不出来的,所以只能用递归

分治法是一种算法思想,分治法主要解决的问题是将大问题,进行拆分,拆分成若干个小的问题进行求解,最终将每个小问题的解进行合并。其实,分治法就是一种暴力破解法(穷举),也是一种搜索最优答案的算法

递归:先递,后归

  • 前进段     指的就是讲问题从大化小
  • 结束段     问题无法再继续化小,则处理当前的问题
  • 返回段    将小问题处理完毕之后,向上返回(有些问题是不需要返回的)

下面看一下这个例题:对一个目录的内容进行遍历

下面来看一个例题:

计算   1+2+3+4+.......+98+99+100

  对题进行分析;

        f(n) 是求1~n的累加

        f(100)就是我们当前最大的问题

        写递归时,一定要先写它的end!

        ↓ 递

        f(n)=f(n-1)+n

        f(100)=f(99)+100    return 1+2+3+..+99 +100

        f(99)=f(98)+99      return 1+2+...+98 +99

        ...

        f(4)=f(3)+4         return 1+2+3+4

        f(3)=f(2)+3         return 1+2+3

        f(2)=f(1)+2         return 1+2

        f(1)=1              return 1

        → end               ↑ 归

class Test01{
    public static void main(String[] args){
        System.out.println(f(100));
    }
    public static int f(int n){
        if(n==1){
            return 1;
        }
        return f(n-1)+n;
    }
    public static void show(){
        System.out.println("show....");
        show();
    }
}

4.7 常用函数

Math类:

Math.E                          比任何其他值都更接近 e(即自然对数的底数)的 double

Math.PI                         比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。

Math.abs(a)                  绝对值函数

Math.ceil(a)                  大于指定数字的最小整数

Math.floor(a)                小于指定数字的最大整数

Math.hypot(x,y)             求两点之间的距离 x=deltX y=deltY

Math.max(a,b)/Math.min(a,b)           求两个数的最大/小值 

Math.pow(a,b)                      求a的b次幂

Math.sqrt(a)                         求平方根

Math.random()                     生成大于等于0.0且于1.0double 随机数

Math.rint(a)                          四舍五入

String类:

String不是基本数据类型而是一个类,既然是类那么肯定有其相关的函数

查询相关

char charAt(int index)                 获取指定角标处的字符

int indexOf(int ch)                       在字符串中从左到右查找指定元素第一次出现的位置  

int lastIndexOf(int ch)                 在字符串中从右向左查找指定元素第一次出现的位置  

int length()                                  获取字符串的长度

substring(int beginIndex, int endIndex)             截取字符串

判断相关

boolean contains(String s)                           判断指定子串是否包含在s中

boolean endsWith(String s)                         判断指定子串是否在s的结尾

boolean startsWith(String prefix)                判断指定子串是否在s的开头

int compareTo(String anotherString)          按照字典顺序比较两个字符串的大小,,返回值有负数   0    正数
                                                                     负数 前者在后者ASCII之前;;0 前者和后者相等;;正数 前者在后者ASCII之后

boolean equals(String anotherString)         比较两个字符串是否相等(比的是内容)

boolean isEmpty()                                        判读是否是空串

修改相关

String replace(char oldChar, char newChar)          字符串内容的替换

注意!!!对字符串的修改永远都不是对其自身进行的修改

字符串本身是不可变的!!!

对字符串的修改往往都是新建个字符串将修改后内容赋值并返回新的字符串

String toUpperCase()                 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写

String toLowerCase()                  使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

String trim()                                返回字符串的副本,忽略前导空白和尾部空白

lass Test02{
    public static void main(String[] args){
        String s="abcd";
        /*
        "abcd"
         0123
        */
        //获取指定角标处的字符
        System.out.println(s.charAt(0));
        //判断指定子串是否包含在s中
        System.out.println(s.contains("ab"));
        //判断指定子串是否在s的结尾
        System.out.println(s.endsWith("cd"));

        //按照字典顺序比较两个字符串的大小
        //返回值有负数 0 正数
        //负数 前者在后者ASCII之前
        //0 前者和后者相等
        //正数 前者在后者ASCII之后
        System.out.println("abc".compareTo("abd"));
        /*
        abc
        abd c-d=-1
        */
        System.out.println("abc".compareTo("abc"));
        //比较两个字符串是否相等(比的是内容)
        System.out.println("abc".equals("abc"));
        //IgnoreCase忽略大小写
        System.out.println("ABC".equalsIgnoreCase("abc"));
        //在字符串中从左到右查找指定元素第一次出现的位置   
        System.out.println("abcccccd".indexOf('c'));
        System.out.println("abcccccd".indexOf("cd"));
        System.out.println("".isEmpty());
        s="abababab";
        System.out.println(s.replace('a','c'));
        System.out.println(s.substring(0,3));//[0,3)
        System.out.println(s.toUpperCase());
        System.out.println("  abc abc abc   ".trim());
    }
}
发布了13 篇原创文章 · 获赞 0 · 访问量 409

猜你喜欢

转载自blog.csdn.net/weixin_45042315/article/details/104300305
今日推荐