zoukankan      html  css  js  c++  java
  • Java-6 数组

    1.数组

    • 用来存储一组相同数据类型的集合(容器)。

    • 特点

      1.数组中元素类型必须一致。
      2.数组本身是引用数据类型,但是里面元素就可以是基本数据类型,也可以是引用数据类型。
      3.数组的长度都一旦给定无法改变。
      
    • 声明数组格式

      数据类型[] 数组名
      
      数据类型 数组名[]
      
    • 数组声明

      int[] arr
      

    1.1动态数组初始化

    • 动态初始化
    // 数据类型[] 数组名 new 数据类型[长度]
    int[] arr=new int[4];
    
    • 数组的索引:从0开始,最大值就是数组长度减1.

    • 给数组中元素赋值:

      数组名[索引值]= 要赋的值;
      
    • demo

      package Array;
      
      public class ArrayDemo1 {
      	public static void main(String[] args) {
      		int [] arr;
      		arr = new int[4];
      		arr[2] = 4;
      		arr[3] = 66;
      		System.out.println(arr[0]);// 0
      		System.out.println(arr[2]);// 4
      	}
      }
      
    • 创建一个String类型4个长度数组,把四个季节存储到该数组中

      package Array;
      
      public class ArrayDemo2 {
      	public static void main(String[] args) {
      		String[] arr;
      		arr = new String[4];
      		arr[0] = "春天";
      		arr[1] = "夏天";
      		arr[2] = "秋天";
      		arr[3] = "冬天";
      		System.out.println(arr.length);
      		for(int i=0;i<arr.length;i++) {
      			System.out.println(arr[i]);
      		}
      	}
      }
      
      
    • 创建一个char类型的数组,把"你","好"分别存进去

      package Array;
      
      public class ArrayDemo2 {
      	public static void main(String[] args) {
      		char[] arr = new char[2]
      		arr[0] = '你';
      		arr[1] = '好';
      	}
      }
      
    • 创建一个长度10的int数组,把1-10存储进去

      package Array;
      
      public class ArrayDemo2 {
      	public static void main(String[] args) {
      		int[] arr = new int[10];
      		for (int i=0; i<10; i++) {
      			arr[i] = i+1;
      		}
      	}
      }
      

    1.2.静态初始化

    • 给定数组中元素,由系统根据元素个数开辟空键并赋值。

    • 格式

      数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素2......}
      
      简写: 只有第一个初始化时候才可以这么书写,重新赋值不能这么写
      数据类型[] 数组名 = {元素1,元素2,元素2......}
      
    • demo

      int[] arr2 = new int[] {1,3,4,5,2,2,55,3};
      arr2 = new int[] {3,4,6};
      
    • 创建int数组,存入5个元素,求该数组元素之和,平均值

      package Array;
      
      public class ArrayDemo3 {
      	public static void main(String[] args) {
      		int sum = 0;
      		int[] arr = new int[] {1,6,23,5,9};
      		for (int i=0;i<arr.length;i++) {
      			sum += arr[i];
      		}
      		System.out.println("求和:"+ sum);// 44
      		System.out.println("平均值:" + (double)sum/arr.length);// 8.8
      	}
      }
      

    1.3数组内存分析

    • 在java中内存分配:栈和堆,栈中存储局部变量,方法的执行。堆可以简单理解new出来的东西。
    • 存储在堆内粗中数据类型是有默认值的,如果是引用类型为null。

    // 解析:
    	在我们通过new int[5] 时候会在堆开辟一个5个长度数组空间,并形成一个地址,通过在main种,int arr 指向该数组内存地址,当我们给数组内元素赋值,首先根据内存地址找到该数组堆空间位置,并修改相应的值。
    

    1.4 数组中常见2种异常

    • 空指针异常
    package Array;
    
    public class ArrayDemo4 {
    	public static void main(String[] args) {
    		int[] arr = null;
    		System.out.println(arr);
    		// 当用null调用里面数据和方法,会出现空指针异常
    		System.out.println(arr[0]);
    	}
    }
    
    
    • 数组角标越界异常
    arr = new int[3];
    System.out.println(arr[3]);
    

    1.5数组练习案例

    • 点名系统,从班级所有人姓名种随机抽选一个人:
    package Array;
    
    import java.util.Random;
    
    public class ArrayDemo5 {
    	public static void main(String[] args) {
    		String[] names = new String[]{"小明","小刘","小刚","小邱","小赵"};
    		// 创建Random对象
    		Random r = new Random();
    		// 生成随机数 下面生成数0<=num<10
    		int num = r.nextInt(names.length);
    		System.out.println(names[num]);
    	}
    }
    

    1.6数组的打印及工具类

    • Array.ArrayDemo
    package Array;
    
    import util.ArrayUtil;
    
    public class ArrayDemo6 {
    	public static void main(String[] args) {
    		int[] arr = {13, 15, 16,40};
    		String[] arr2 = {"小明", "小洪", "小刚"};
    		ArrayUtil.printArr(arr);
    		ArrayUtil.printArr(arr2);
    	}
    }
    
    
    • util.ArrayUtil
    package util;
    
    public class ArrayUtil {
        // 接收int类型
    	public static void printArr(int[] arr) {
    		for(int i=0;i<arr.length;i++) {
    			if (arr.length == 1) {
    				System.out.println("[" + arr[0] + "]");
    			} else if (i == 0) {
    				System.out.print("[" + arr[i] + ",");
    			}else if (i == arr.length-1) {
    				System.out.println(arr[i] + "]");
    			}else {
    				System.out.print(arr[i] + ",");
    			}
    		}
    	}
    	// 方法重载  接收string
    	public static void printArr(String[] arr) {
    		for(int i=0;i<arr.length;i++) {
    			if (arr.length == 1) {
    				System.out.println("[" + arr[0] + "]");
    			} else if (i == 0) {
    				System.out.print("[" + arr[i] + ",");
    			}else if (i == arr.length-1) {
    				System.out.println(arr[i] + "]");
    			}else {
    				System.out.print(arr[i] + ",");
    			}
    		}
    	}
    	
    }
    
    

    1.7数组中的最值

    // 主函数
    package Array;
    import util.ArrayMaxMin;
    
    public class ArrayDemo7 {
    	public static void main(String[] args) {
    		// 创建一个数组
    		int[] arr = {23,555,32,13,1,55};
    		ArrayMaxMin.arrMaxMin(arr);
    	}
    }
    
    
    
    // 工具类
    package util;
    public class ArrayMaxMin {
    	public static void arrMaxMin(int[] arr) {
    		// 设置一个变量存储最大值
    		int max = arr[0];
    		int min = arr[0];
    		// 遍历数组用max和数组中元素比较
    		for(int i=0;i<arr.length;i++) {
    			if (arr[i] > max) {
    				max = arr[i];
    			}
    			if (arr[i]< min) {
    				min = arr[i];
    			}
    		}
    		System.out.println(max);// 555
    		System.out.println(min);// 1
    	}
    }
    
    
    

    1.8数组元素交换

    package Array;
    
    import util.ArrayUtil;
    public class ArrayDemo8 {
    	public static void main(String[] args) {
    		int[] arr = new int[] {100,200};
    		int tmp = arr[0];
    		arr[0] = arr[1];
    		arr[1] = tmp;
    		ArrayUtil.printArr(arr);
    	}
    }
    

    1.9数组的逆序

    • 方式1:
    package Array;
    
    import util.ArrayUtil;
    
    public class ArrayDemo9 {
    	public static void main(String[] args) {
    		int[] arr = {1,2,3,4,5,6,7,8};
    		int tmp;
    		for (int i=0;i<arr.length/2;i++) {
    			tmp = arr[i];
    			arr[i] = arr[arr.length-i-1];
    			arr[arr.length-i-1] = tmp;
    		}
    		ArrayUtil.printArr(arr);// [8,7,6,5,4,3,2,1]
    	}
    }
    
    • 方式2:
    package Array;
    
    import util.ArrayUtil;
    
    public class ArrayDemo9 {
    	public static void main(String[] args) {
    		int[] arr = {1,2,3,4,5,6,7,8};
    		for(int start=0,end=arr.length-1; start< end; start++,end--) {
    			int tmp = arr[start];
    			arr[start] = arr[end];
    			arr[end] = tmp;
    		}
    		ArrayUtil.printArr(arr);
    	}
    }
    

    1.10多维数组

    • n 维数组就是元素为n-1维数组的数目。
    • 二维数组格式:
    1.数据类型[][] 数组名 = new 数据类型[m][n]
    	m: 二维数组中一维数组的个数
    	n: 一维数组中元素个数
    
    2. 数据类型[][] 数组名 = new 数据类型[m][];
    	m: 二维数组中一维数组的个数
    3. 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...}}
    
    • 二维数组定义方式:
    • 方式1:
    int[][] arr = new int[4][3];
    System.out.println(arr);// [[I@7c75222b
    System.out.println(arr[0]);// [I@4c203ea1
    System.out.println(arr[0][0]);// 0
    
    // 给第二个数组中的第二个元素赋值给100
    arr[1][1] = 100;
    // 打印最后一个数组中最后一个元素
    System.out.println(arr[3][2]);
    
    
    • 方式2:
    // 注意:给二维数组内一维数组赋值时候,不能简写
    int[][] arr2 = new int[5][];
    arr[0] = new int[] {1,2,3,4,5,6};
    arr[1] = new int[] {1,2,3};
    
    • 方式3:
    int[][] arr3 = new int[][] {{2,3,5,6},{4,5,3}};
    System.out.println(arr3.length);// 2
    System.out.println(arr3[0].length);// 4
    System.out.println(arr3[0][3]);// 6
    
    • 二维数组中遍历:
    for(int i=0;i<arr3.length;i++) {
    	ArrayUtil.printArr(arr3[i]);
    }
    // [2,3,5,6]
    // [4,5,3]
    
    
  • 相关阅读:
    mybatis遍历map
    程序员开发思考-1
    linux shell学习-1
    IDEA tomcat部署
    理解TCP/IP协议
    winform实现自定义折叠面板控件
    目录特殊符号导致的应用程序处于中断模式
    Vue-element-admin实现菜单根据用户权限动态加载
    基于EF的一个简单实战型分层架构
    Linux开启SELinux的情况下怎么解决nginx403跟502错误
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13702266.html
Copyright © 2011-2022 走看看