zoukankan      html  css  js  c++  java
  • Java基础之数组

    数组

      数组就是用于存储相同数据类型数据的一个容器。可以通过有规律的索引来访问没有规律的元素。

    一维数组

      定义格式:元素的数据类型[ ] 数组名称 = new 元素的数据类型 [ 数组容器大小 ];

      数组定义格式解释:

        元素:数组中的数据,数组中的变量。

        数据类型:数组中的数据的数据类型,用来声明当前数组中,可以存放什么类型的数据。

        [ ]:表示是一个一维数组

        数组名称:数组本身也是一个变量,用于存储数组的地址的变量。所以,数组名称要符合标识符规范。

        =:赋值符号,将数组的地址,赋值给数组的名称

        new:新建,用于在堆内存中开辟一块空间,用来存储数据

        元素的数据类型:和前面的元素的数据类型保持一致

        数组容器的大小:可以存储数据的个数,数组长度必须给出,用于确定在内存中开辟多大的一块空间。

      数组初始化的格式:

        1.元素的数据类型[] 数组名称 = new 元素的数据类型[数组元素的个数];

        2.在程序书写的时候,就知道了数组中的元素是什么值,可以使用这一种

         元素的数据类型[] 数组名称 = new 元素的数据类型[] {元素值的罗列};

         可以简写为:元素的数据类型[] 数组名称 = {元素值的罗列};

    数组的遍历

      遍历:把所有元素都访问一遍。

      方式:通过循环,访问到数组中所有元素的索引。通过索引,访问到对应元素。

      索引:角标、下标、脚标,表示某个元素在数组中的位置。范围:0 ~ 数组长度-1。数组长度:数组元素的个数,可以通过 数组名称.length 获取。

    代码:

    public static void main(String[] args) {
    //	定义一个数组
    	int[] arr = {12, 23, 34, 45, 56};
    //	定义循环,获取到数组所有的索引,此时i不仅表示循环的控制,还表示数组的索引
    	for (int i = 0; i < arr.length; i++) {
    //		定义一个变量接收根据索引获得到的数组中的值,并打印出来
    		int x = arr[i];
    		System.out.println(x);
    	}
    }
    

      练习:

      1、定义一个方法,遍历一个一维数组。

        思路:通过循环,访问到数组中所有元素的索引。通过索引,访问到对应元素。
      2、定义一个方法,求一个一维数组中的最大值。

        思路:设置一个变量 max,作用是先代表数组中的最大值,遍历数组,让每个元素都和该变量比较,如果比最大值变量还要大,那么就让当前元素替换掉最大值变量中的数据。
      3、定义一个方法,将一个数组中的数据进行反转。

        思路:第一个变成最后一个,第二个变为倒数第二个。(0索引和arr.length-1索引位置对调,1索引和arr.length-2索引位置对调....,直到数组的最中间的元素,停止对调。

    代码:

    public static void main(String[] args) {
    //	定义一个数组
    	int[] arr = {16,80,33,43,42,57,29};
    //	调用数组遍历方法,将数组作为一个实参传递
    	method01(arr);
    //	调用数组数组获取最大值的方法,将数组作为一个实参传递
    	method02(arr);
    //	调用数组数组反转的方法,将数组作为一个实参传递
    	method03(arr);
    }
    	
    //	定义一个有参数的数组遍历方法
    public static void method01(int[] arr) {
    //	循环遍历,获取所有的元素
    	for (int i = 0; i < arr.length; i++) {
    		System.out.println(arr[i]);
    	}
    }
    
    //	定义一个有参数的数组获取最大值的方法
    public static void method02(int[] arr) {
    //	先假设数组的0号索引对应的值是最大值,将它复制给一个变量
    	int max = arr[0];
    //	循环遍历进行比较
    	for (int i = 1; i < arr.length; i++) {
    		//如果当前元素大于假设的最大值
    		if (arr[i] > max) {
    			max = arr[i];//就让当前元素将假设的最大值替换掉
    		}
    	}
    	//循环结束之后,此时max就是数组中的最大值
    	System.out.println("数组最大值为:"+max);
    }
    	
    //	定义一个有参数的数组反转的方法
    public static void method03(int[] arr) {
    //	循环遍历比较,可以在for循环定义两个变量,一个索引从前向后,一个索引从后向前,
    	for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
    		//i和j位置的元素,进行交换
    		int temp = arr[i];
    		arr[i] = arr[j];
    		arr[j] = temp;
    	}
    }
    

    二维数组

      二维数组:数组的每个元素,恰好又是一个数组。

      定义方式:

        int[][] arr = new int[3][];

        解释:定义一个二维数组,名字arr,数组中每个元素还是一个数组,但是元素对应的数组,没有被创建的,arr[0]  = null。

        注意:二维数组的长度,一定要给出的,[3]代表二维数组长度

        int[][] arr2 = {{},{4},{5,6,7}};

        解释:arr2是一个二维数组,里面有3个元素,对应三个数组,分别是{},{4},{5,6,7}

       注意:int [ ] [ ] arr = new int [0] [0];

        这样定义回抛出异常,因为arr[0]索引上的元素为{},是一个没有任何元素的数组,获取没有元素的数组的指定索引,会抛出数组索引越界异常 ArrayIndexOutOfBoundsException。

    数组的注意事项

      1.在对数组进行操作时,先控制其值不为null,然后再判断数组的长度以免发生空指针异常。如果 int [ ] a = null,那么针对于数组的所有操作都将抛出空指针异常。

      2.其实,如果不判断数组的长度不为0,就进行数组的循环遍历,for循环是可以控制住不报错的但是最好将判断数组长度不为0写上这样比较严谨。

      3.int [ ] a = null;在内存中不开辟空间。int [ ] a = { };在内存中开辟空间,只不过数组中没有元素。

    二维数组遍历代码:

    public static void main(String[] args) {
    //		定义一个二维数组
    		int[][] arr2 = { {}, { 4 }, { 5, 6, 7 } };
    //		 首先,先判断二维数组不能为null并且数组的长度不为0
    		if (arr2 != null && arr2.length != 0) {
    //			利用for循环,遍历二维数组的每一个元素
    			for (int i = 0; i < arr2.length; i++) {
    //				二维数组的每一个元素又是一个数组,所以还需要判断数组不能为null并且数组的长度不为0
    				if (arr2[i] != null && arr2[i].length != 0) {
    //					利用for循环,遍历二维数组的每一个一维数组中的元素
    					for (int j = 0; j < arr2[i].length; j++) {
    						int z = arr2[i][j];
    //						在一行输出每个一维数组中的元素,用,分隔
    						System.out.print(z+",");
    					}
    //					每输出完一个一维数组,换行
    					System.out.println();
    				} else {
    					System.out.println("一维数组不能为null并且数组长度不能为0");
    				}
    			}
    		}else {
    			System.out.println("二维数组不能为null并且数组长度不能为0");
    		}
    }
    

      

     练习:

      分析以下需求,并用代码实现:
      (1)定义一个int类型的一维数组,内容为{6,2,9,15,1,5,20,7,18}
      (2)将数组最大元素与最后一位元素进行交换,最小元素与第一位元素进行交换,并打印数组,最后效果{1,2,9,15,6,5,18,7,20}
      提示思路:先查找最大值和最小值出现的索引。

    代码实现:

    public static void main(String[] args) {
    		int[] arr = {6,2,9,15,1,5,20,7,18};//{1,2,9,15,6,5,18,7,20}
    		//判断数组不能为null并且数组长度不能为0
    		if(arr != null&&arr.length != 0){
    			//判断数组中的元素个数是否为1,如果只有一个数,直接输出
    			if(arr.length == 1){
    				System.out.println(arr[0]);
    			//判断数组中元素个数是否为2,如果有两个,判断大小,最后输出结果
    			}else if(arr.length == 2){
    				if(arr[0]>arr[1]){
    					int temp = arr[0];
    					arr[0] = arr[1];
    					arr[1] = temp;
    				}
    				for(int i = 0;i<arr.length;i++){
    					System.out.print(arr[i]+",");
    				}
    			//判断数组中的数据个数是否为2个以上
    			}else if(arr.length > 2){
    				//定义几个变量假设是最小值,最大值,最小值的索引,最大值的索引
    				int min = arr[0];
    				int max = arr[arr.length-1];
    				int minIndex = 0;
    				int maxIndex = arr.length-1;
    //				使用for循环进行遍历
    				for(int i = 0;i<arr.length;i++){
    //					找到最小值和最小值的索引
    					if(arr[i]<min){
    						minIndex = i;
    						min = arr[i];
    					}
    //					找到最大值和最大值的索引
    					if(arr[i]>max){
    						maxIndex = i;
    						max = arr[i];
    					}
    				}
    				//将最小值和第一个数替换
    				int tempMin = arr[minIndex];
    				arr[minIndex] = arr[0];
    				arr[0] = tempMin;
    				//将最大值和最后一个数替换
    				int tempMax = arr[maxIndex];
    				arr[maxIndex] = arr[arr.length-1];
    				arr[arr.length-1] = tempMax;
    //				for循环遍历输出最后结果
    				for(int i = 0;i<arr.length;i++){
    					System.out.print(arr[i]+",");
    				}
    			}
    		}else{
    			System.out.println("数组不能为null并且数组长度不能为0");
    		}
    }
    

      

  • 相关阅读:
    判断是否GUID (转载)
    解决升级至.net4后出现A potentially dangerous Request.Form value was detected from the client (转载)
    C#如何设置Listview的行高高度 转载
    mojoportal之使用tab标签
    C#Windows 服务制作安装删除. 用户注销后,程序继续运行 (转载)
    c# winforms TextBox的记忆功能
    C# 创建windows服务、socket通讯实例 (转载 )
    mojoportal中的模块映射
    winforms中限定上传文件类型
    [笔记]软核 固核 硬核的区别
  • 原文地址:https://www.cnblogs.com/w998/p/11257957.html
Copyright © 2011-2022 走看看