• Java 学习 day04


    17-数组(概述-内存结构)

    概念:同一种类型数据的集合,其实数组就是一个容器。

    可以自动给数组中的元素从0开始编号,方便操作这些元素。

    int[] x = new int[3];

    01-数组(静态初始化-常见问题)

    int[] arr = new int[]{3,1,6,5,4}; //静态初始化方式

    简化形式: int[] arr = {3,1,6,5,4};

    常见问题:

    ①ArrayIndexOutOfBoundsException  操作数组时,访问到了数组中不存在的角标。

    ②NullPointerException 空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。

    02-数组(常见操作-遍历)

    数组的操作:获取数据中的元素。通常会用到遍历。

    length -- 数组中有一个属性可以直接获取到数组元素个数:

    使用方式:数组名称.length 

    Eg:定义功能,用于打印数组中的元素。元素之间用逗号隔开。

        public static void printArray(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                if (i != arr.length - 1) {
                    System.out.print(arr[i] + ",");
                } else {
                    System.out.println(arr[i]);
                }
            }
        }
    View Code

    03-数组(常见操作-获取最值)

    Eg:给定一个数组{5,1,6,4,2,8,9} 1. 获取数组中的最大值以及最小值

    package myFirstCode;
    
    /*
     * 给定一个数组{5,1,6,4,2,8,9} 1. 获取数组中的最大值以及最小值
     */
    public class ArrayTest {
        
        /*
         * 获取数组中最大值。
         * 思路:
         * 1. 获取最大值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。
         * 通过一个变量进行临时存储。
         * 2. 让数组中的每一个元素都和这个变量中的值进行比较。
         * 如果大于了变量中的值,就用该变量记录最大值。
         * 3. 当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值。
         * 
         * 步骤:
         * 1.定义变量。初始化为数组中任意一个元素即可。
         * 2.通过循环语句对数组进行遍历。
         * 3.在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;
         * 
         * 需要定义个功能来完成。一遍提高复用性。
         * 1.明确结果,数组中的最大元素 int 
         * 2.未知内容:一个数组 int[]
         */
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] arr = { 5, 2, 6, 4, 9, 8, 1 };
            System.out.println("最大值="+getMax(arr));
    
        }
    
        public static int getMax(int[] arr) {
            int tmp = arr[0], tmp1 = arr[0];
            for (int i = 1; i < arr.length; i++) {
    
                if (arr[i] > tmp) {
                    tmp = arr[i];
                }
                if (arr[i] < tmp1) {
                    tmp1 = arr[i];
                }
    
            }
            return tmp;
    //        return tmp1;
        }
    
    }
    View Code

    04-数组(排序-选择排序)

    Eg:对给定数组进行排序。

    选择排序:内循环结束一次,最值出现头角标位置上。

    package myFirstCode;
    /*
     * 对给定数组进行排序。
     * {5,1,6,4,2,8,9}
     */
    public class ArrayTest2 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] arr = {5,1,6,4,2,8,9};
            //排序前:
            printArray(arr);
            //排序
            selectSort(arr);
            //排序前:
            printArray(arr);
        }
        
        public static void printArray(int[] arr) {
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                if (i != arr.length - 1) {
                    System.out.print(arr[i] + ",");
                } else {
                    System.out.println(arr[i]+"]");
                }
            }
        }
        
    //选择排序
        public static void selectSort(int[] arr){
            
            for (int i = 0; i < arr.length-1; i++) {
                for (int j = i+1; j < arr.length; j++) {
                    if (arr[i]<arr[j]) {
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }                
                }            
            }        
        }
        
    //冒泡排序
        public static void bubbleSort(int[] arr)
        {
            for (int i = 0; i < arr.length-1; i++) 
            {
                for (int j = 0; j < arr.length-i-1; j++) //-x:让每一次比较的元素减少,-1:避免角标越界。
                {
                    if (arr[j]<arr[j+1])
                    {
                        int temp = arr[j];    
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                        
                        
                    }
                }
            }
        }
    }
    View Code

    05-数组(排序-冒泡排序)

    冒泡排序:相邻的两个元素进行比较,如符合条件换位。第一圈:最值出现了最后位。

    Eg:对给定数组进行排序。

        public static void swap(int[] arr,int a,int b){
            int temp = arr[a];
            arr[a] = arr[b];
            arr[b] = temp;
        }
    View Code

    ***//Arrays.sort(arr); // java中已经定义好的一种排序方式,开发中,对数组排序,要使用此方法。***

    package myFirstCode;
    /*
     * 对给定数组进行排序。
     * {5,1,6,4,2,8,9}
     */
    public class ArrayTest2 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] arr = {5,1,6,4,2,8,9};
            //排序前:
            printArray(arr);
            //排序
            selectSort(arr);
            //排序前:
            printArray(arr);
        }
        
        public static void printArray(int[] arr) {
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                if (i != arr.length - 1) {
                    System.out.print(arr[i] + ",");
                } else {
                    System.out.println(arr[i]+"]");
                }
            }
        }
        
        public static void selectSort(int[] arr){
            
            for (int i = 0; i < arr.length-1; i++) {
                for (int j = i+1; j < arr.length; j++) {
                    if (arr[i]<arr[j]) {
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }                
                }            
            }        
        }
    }
    View Code

    06-数组(排序-位置置换功能抽取)

     任何排序,都需要对满足条件的元素进行位置置换,所以可以把这部分相同的代码提取出来,单独封装成一个函数。

    Eg:

    public static void swap(int[] arr,int a,int b){
            int temp = arr[a];
            arr[a] = arr[b];
            arr[b] = temp;
        }
    View Code

    07-数组(折半查找)

    数组的查找

    package myFirstCode;
    /*
     * 数组的查找
     */
    public class ArrayTest4 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] arr = {3,1,5,4,2,9};
            int index = getIndex(arr,2);
            System.out.println("index="+index);
        }
    
        //定义功能,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组中不存在。
        public static int getIndex(int[] arr,int key)
        {
            for (int i = 0; i < arr.length; i++) {
                if(arr[i]==key)
                    return i;            
            }
            return -1;
        }
    
    }
    View Code

    折半查找

    package myFirstCode;
    
    /*
     * 数组的查找
     */
    public class ArrayTest4 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            // int[] arr = {3,1,5,4,2,9};
            // int index = getIndex(arr,2);
            int[] arr = { 1, 3, 5, 7, 9, 25, 33 };
            int index = halfSearch(arr, 9);
            System.out.println("index=" + index);
        }
        
        /*
         * 折半的第二种方式。
         */
        public static int halfSearch2(int[] arr,int key)
        {
            int min = 0,max = arr.length-1,mid;
            while (min<=max) {
                mid = (max+min)>>1;// >>1 等于 /2
                if(key>arr[mid])
                    min = mid + 1;
                else if(key<arr[mid])
                    max = mid - 1;
                else 
                    return mid;
            }
            return -1;
        }
        
        /*
         * 折半查找。提高效率,但是必须要保证数组是有序的数组。
         */
        public static int halfSearch(int[] arr, int key) {
            int min, mid, max;
            min = 0;
            max = arr.length - 1;
            mid = (max + min) / 2;
            while (arr[mid] != key) {
                if (key > arr[mid])
                    min = mid + 1;
                else if (key < arr[mid])
                    max = mid - 1;
                if (min > max)
                    return -1;
                mid = (max + min) / 2;
            }
            return mid;
        }
    
        // 定义功能,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组中不存在。
        public static int getIndex(int[] arr, int key) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == key)
                    return i;
            }
            return -1;
        }
    
    }
    View Code

    练习,有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。

        /*
         * 练习,有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。
         */
        public static int getIndex_2(int[] arr,int key)
        {
            int min = 0,max = arr.length-1,mid;
            while (min<=max) {
                mid = (max+min)>>1;// >>1 等于 /2
                if(key>arr[mid])
                    min = mid + 1;
                else if(key<arr[mid])
                    max = mid - 1;
                else 
                    return mid;
            }
            return min;
        }
    View Code

    08-数组(十进制-二进制)

    Eg:

    public class ArrayTest5 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            toBin(6);
        }
    
        public static void toBin(int num)
        {
            StringBuffer sb = new StringBuffer();
            while (num > 0) 
            {
                sb.append(num%2);
                num = num / 2;    
            }
            System.out.println(sb.reverse());
            
        }
    }
    View Code

    09-数组(十进制-十六进制)

    Eg:

    package myFirstCode;
    
    public class ArrayTest5 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            toBin(6);
            toHex(60);
        }
    
        public static void toHex(int num)
        {
            StringBuffer  sb = new StringBuffer();
            for (int x = 0; x < 8; x++) 
            {
                int temp = num & 15;
                if(temp>9)
                    sb.append((char)(temp-10+'A'));
                else
                    sb.append(temp);
                
                num = num >>>4;
            }
            System.out.println(sb.reverse());
        }
        
        
        public static void toBin(int num)
        {
            StringBuffer sb = new StringBuffer();
            while (num > 0) 
            {
                sb.append(num%2);
                num = num / 2;    
            }
            System.out.println(sb.reverse());
            
        }
    }
    View Code

    10-数组(查表法十进制-十六进制)

    11-数组(查表法十进制-二进制)

    12-数组(进制转换优化)

    13-数组(二维数组)

    int[][] arr = new int[3][4]; //定义了名称为arr的二维数组。二维数组中有3个一维数组。

                  //每一个一维数组中有四个元素。

    package myFirstCode;
    
    public class Array2Demo {
    
        public static void main(String[] args) {
    //        // TODO Auto-generated method stub
    //        //int[] arr = new int[3];//一维数组
    //        int[][] arr = new int[3][4];//定义了名称为arr的二维数组。二维数组中有3个一维数组。
    //                                    //每一个一维数组中有四个元素。
    //        System.out.println(arr[0]);
            /*
            int[][] arr = new int[3][];
            
            arr[0] = new int[3];
            arr[1] = new int[1];
            arr[2] = new int[2];
            
            System.out.println(arr.length);
            System.out.println(arr[2].length);
            */
    
            int[][] arr = {{3,5,7,9},{2,3,4,6},{1,5,8,9}};
            
            int sum = 0;
            for (int x = 0; x < arr.length; x++) {
                for (int y = 0; y < arr[x].length; y++) {
                    sum = sum + arr[x][y];    
                }
            }
            System.out.println("sum="+sum);
            
        }
    
    }
    View Code

    14-数组(二维数组练习)

    一维数组--int[] x;int x[];

    二维数组--int[][] y;int y[][];int[] y[];

    int[] x,y[];  --等同于--  int[] x; int[] y[];

  • 相关阅读:
    深度学习中一些常用函数的偏导数
    C++ 隐式类型转换与类型转换函数
    Tensorboard数据(tfevents文件)格式解析及ofstream使用问题
    记一次由unordered_map引起的bug
    softmax数值溢出 与 xent-loss问题
    C++ 单独编译(separate compilation)与 模板的编译
    TensorFlow源码分析——Tensor与Eigen
    ubuntu16.04 docker tensorflow-gpu镜像使用
    vscode Ftp-sync插件报错问题: sync error: Error: Permission denied
    PHP加速之eaccelerator
  • 原文地址:https://www.cnblogs.com/SH-xuliang/p/6863065.html
Copyright © 2020-2023  润新知