码迷,mamicode.com
首页 > 编程语言 > 详细

java(数组及常用简单算法 )

时间:2017-12-14 19:34:08      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:nbsp   中间   记录   原因   成员   常用   定义   []   空指针异常   

数组

数组:数组是存储同一种数据类型数据的集合容器。

数组的定义格式:
数据类型[]  变量名  =  new  数据类型[长度];

数组的好处:对分配到数组对象中每一个数据都分配一个编号(索引值、角标、下标),索引值的范围是从0开始,最大是:长度-1。

局部变量:如果一个变量是在一个方法(函数)的内部声明的,那么该变量就是一个局部变量。

成员变量:成员变量就是定义在方法之外,类之内的.

数组中最常见的问题:

1.NullPointerException 空指针异常原因:引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
2.ArrayIndexOutOfBoundsException索引值越界。原因:访问了不存在的索引值。

数组的初始化方式:

动态初始化:
    数据类型[] 变量名 = new 数据类型[长度];

静态初始化:  
    数据类型[] 变量名 = {元素1,元素2.....};

如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化。如果数据一开始还不太明确,这时候就建议使用动态初始化。

class Demo7 {
    public static void main(String[] args) {    
        //动态初始化
        //int[] arr = new int[10];
    
        //静态初始化
        int[] arr = {10,20,30,40,50};
        for(int index = 0 ; index<arr.length ; index++){
             System.out.print(arr[index]+",");
        }
    /*
        int[] arr = new int[50];
        Scanner scanner = new Scanner(System.in);
        for(int i  = 0 ; i< arr.length ; i++){
            arr[i] = scanner.nextInt();
        }
        */
    }
}
class Demo8 {
    public static void main(String[] args) 
{
        int[] arr = {-12,-14,-5,-26,-4};
        int max = getMax(arr);
        System.out.println("最大值:"+ max); 
    }

    public static int  getMax(int[] arr) {
        int max = arr[0]; //用于记录最大值
        for(int i = 1 ; i < arr.length ; i++){
            if(arr[i]>max){  //如果发现有元素比max大,那么max变量就记录该元素。
                max = arr[i];
            }
        }
        return max;
    }
}

选择排序(直接排序):使用一个元素与其他 的元素挨个比较一次,符合条件交换位置。

class Demo9 {
    public static void main(String[] args) {
        int[] arr = {12,5,17,8,9};  //对于5元素的数组,只需要找出4个最大值就可以排序了。
        selectSort(arr);
    }
    
    public static void selectSort(int[] arr) {
        //把最大值放在首位置。
        for(int j = 0; j<arr.length-1; j++){  //  控制的是轮数。
            for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
                if(arr[i]>arr[j]){
                    //交换位置
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }       
        //遍历数组,查看效果
        System.out.print("目前的元素:");
        for (int i = 0 ; i<arr.length  ;i++){
            System.out.print(arr[i]+",");
        }
    }
}

冒泡排序:冒泡排序的思想就是使用相邻的两个 元素挨个比较一次,符合条件交换位置。

class Demo10 {
    public static void main(String[] args) {
        int[] arr = {12,8,17,5,9}; // 最大的索引值: 4   容量:5 
        bubbleSort(arr);
    }

    public static void bubbleSort(int[] arr){
        // 把最大值放在最后一个位置
        for(int j = 0 ; j<arr.length-1 ; j++){ //控制轮数
            for(int i = 0 ; i<arr.length-1-j  ; i++){  // 找出一个最大值  
                //相邻的元素比较
                if(arr[i]>arr[i+1]){
                    int temp  = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
        //遍历数组,查看效果
        System.out.print("目前的元素:");
        for (int i = 0 ; i<arr.length  ;i++){
            System.out.print(arr[i]+",");
        }
        
    }
}

折半查找法(二分法): 使用前提必需是有序的数组。

class Demo12 {
    public static void main(String[] args) {
        int[] arr = {12,16,19,23,54};
        //int index = searchEle(arr,23);
        int index = halfSearch(arr,116);
        System.out.println("元素所在的索引值是:"+ index);
    }   
    public static int halfSearch(int[] arr, int target){
        //定义三个变量分别记录最大、最小、中间的查找范围索引值
        int max = arr.length-1;
        int min = 0;
        int mid = (max+min)/2;
        while(true){
            if(target>arr[mid]){
                min = mid+1;
            }else if(target<arr[mid]){
                max = mid -1;
            }else{
                //找到了元素
                return mid;
            }
            //没有找到的情况
            if (max<min){
                return -1;
            }
            //重新计算中间索引值
            mid = (min+max)/2;
        }
    
    }

    public static int searchEle(int[] arr, int target) {
        for(int i = 0 ; i<arr.length ; i++){
            if(arr[i]==target){
                return i;
            }
        }
        return -1;
    }
}

二维数组: 二维数组就是数组中的数组。

二维数组的定义格式:

数据类型[][] 变量名 = new 数据类型[长度1][长度2];

二维数组 的初始化方式:

动态初始化:
数据类型[][] 变量名 = new 数据类型[长度1][长度2];  

静态初始化:
数据类型[][]  变量名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...} ..}
class Demo16 {
    public static void main(String[] args) {
        int[][] arr = {{10,11,9},{67,12},{33,35,39,40}};
        //遍历二维数组
        for(int i = 0;  i <arr.length ; i++){
            for(int j = 0 ; j<arr[i].length ; j++){
                System.out.print(arr[i][j]+",");
            }
            //换行
            System.out.println();
        }
    }
}

数组的特点:

1.数组只能存储同一种数据类型的数据。
2.数组是会给存储到数组中的元素分配一个索引值的,索引值从0开始,最大的索引值是length-1;
3.数组一旦初始化,长度固定。
4.数组中的元素与元素之间的内存地址是连续的。

java(数组及常用简单算法 )

标签:nbsp   中间   记录   原因   成员   常用   定义   []   空指针异常   

原文地址:http://www.cnblogs.com/intelwisd/p/8038929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!