Learning is reassuring and technology is self-confidence.

学习使人心安,技术使人自信。

函数只有被调用才执行。

一个函数中不能定义其它函数,所以不能在主函数里定义函数。但是可以在一个函数中调用其它函数。

函数:封装了某些反复要用的代码。

格式: 修饰符  返回值类型  函数名(参数类型  形式参数1,参数类型  形式参数2)

           {

                       执行语句;

                       return 返回值;   //当返回值类型是void的时不写return;

           } 

真正开发时,所有功能都被定义在相应函数中,而不是定义在主函数中。主函数只负责调用。下面是一个函数从诞生到优化的过程 。(先从两个问题思考:结果什么类型?需要输入求知参数吗?)

当函数没有具体返回值时,返回值类型为void 。

函数是功能集合,只把执行要完成功能的语句写进去,多余的一句也不要加,交给调用它的语句去写。

主函数只负责调用 ,功能都由函数完成。下图是一个代码的简化过程。

写函数先考虑两个问题:有没有求知参数?返回值类型是啥?

java定义一个数组object Java定义一个数组的主函数_java数组应用

注意:定义函数时只写函数该完成的功能,多一句都不必写,比如打印不打印,那是调用者的事,不要写在函数里。函数就是功能,是类中一段独立运行的代码 。

重载overload:同一个类中,允许一个以上的同名函数,只要参数个数和参数类型不同即可。只和参数列表有关系。

应用于:当执行的功能相同只是未知参数不同时,用重载。

java定义一个数组object Java定义一个数组的主函数_java入门_02

重载练习:

java定义一个数组object Java定义一个数组的主函数_通俗版java_03

数组:相同类型数据集合。java中接触的第一个引用数据类型。

定义:int[] a=new int[10]    //定义了一个大小为10的数组。

栈内存和堆内存:

java定义一个数组object Java定义一个数组的主函数_Java基础知识_04

java运行时,局部变量放在栈内存,用完即释放。主动清除。

通过new开辟的内存都在堆内存,每个实体(数组和对象)都有内存地址值。实体中的变量都有默认初始值(布尔型默认是false)实体不再被使用,会在不确定的时间内被垃圾回收器回收。被java虚拟机垃圾回收机制回收。

int[] x=new int[3]这句话发生了什么??

在栈内存里开一个地方存放变量x,在堆内存中新加入一个数组实体,其值默认都是0,其首地址放在变量x中,此时称x为数组的一个引用。当下面代码出现x=null时,变量x就不再引用这个数组,如果此时这个数组已经没有任何引用,它将被视为垃圾,被清理掉。

java定义一个数组object Java定义一个数组的主函数_java定义一个数组object_05

常见问题:

java定义一个数组object Java定义一个数组的主函数_java数组应用_06

练习1:

获取数组中最大最小元素。

思路:定义一个变量,用来存储最大值。初始可以是数组中任意一个元素。

未知变量:一个数组。

返回值类型:int.

class arrayUse{
    public static void main(String[] args)
    {
        int[] array={9,3,4,7,46,2,1,90};
        int ans=getMax(array);
        System.out.println(ans);
    }

    public static int getMax( int arr[])
    {
        int max=arr[0];
        for (int i=0;i<arr.length;i++)
        {
            if(arr[i]>max)
            {
                max=arr[i];
            }
        }
        return max;
    }
}

练习2:

用数组实现选择排序:

注:选择排序是每次用一个位置的数与其它所有数相比较,每次选出一个最大或最小的,需比较的数的个数每次少一个。

比如,a[0]=9,a[1]=13,a[2]=45,a[3]=6。第一次用a[0]中的9依次去和剩下的三个数比,假设要求从大到小排,则比完第一次后a[0]里放的是45。再用a[1]和剩余的两个数比,依此类推。选择排序的时间复杂度为o(n^2),排序完成后最值在第一位。

class sortDemo
{
    public static void bigSort(int[] arr)
    {
        for (int x=0;x<arr.length-1;x++)    //减1是因为最后剩一个数不用比了
        {
            for (int y=x+1;y<arr.length;y++)  //注意这里是length而不是length-1
            {
                if(arr[x]<arr[y])
                {
                    int temp=arr[x];
                    arr[x]=arr[y];
                    arr[y]=temp;
                }
            }
        }
    }

    public static void print(int[] arr)
    {
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    public static void main(String[] args)
    {
        int[] arr={23,89,1110,3,6,2,9,90};
        bigSort(arr);
        print(arr);
    }
}

练习3:

冒泡排序:最值出现在最后一位。每次比较相邻两位。

所有排序中最快的是希尔排序。

java定义一个数组object Java定义一个数组的主函数_java入门_07

 

 

真正开发时用的代码:

import java.util.*;
class sortDemo
{
     public static void main(String[] args)
    {
        int[] arr={23,89,1110,3,6,2,9,90};
        Arrays.sort(arr);
        print(arr);
    }
    public static void print(int[] arr)
    {
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
}

练习4:

基础查找和折半查找

//普通版
public static void search(int[] arr,int key)
{
    for (int i=0;i<arr.length-1;i++)
    {
        if(arr[i]==key)
            return i;
    }
    return -1;
}

//折半查找
public static void halfSearch(int[] arr,int key)
{
    int min,mid,max;
    min=0;
    max=arr.length-1;
    while(min<=max)  //注意这里是<= 
    {
        mid=(min+max)>>1;
        if(key>arr[mid])
        {
            min=mid+1;
        }
        else if(key<arr[mid])
        {
            max=mid-1;
        }else
        return mid;
    }
    return -1;
}

 小技巧:折半查找在面试时还可以应用于顺序插入一个数,把最后的返回-1改成返回min即可。