第五章总结 :数组

5.2一维数组:点

数组简单的认为是很多格子

5.2.1如何去定义数组:上面先括号+数组名比较常用

5.2.2 分配内存并进行初始化

 怎么对元素进行赋值,a中有三个元素

 错误:数组下标越界,超出赋值长度

解决方法:重新赋值分配a,或者将多赋值删掉,注意for循环里条件

(或者用a.length)/(for循环,注意冒号)

 1.

2. 


public class Fiveone {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//申明一维数组
		int[] a;//先括号在加数组名
		char b[];//先数组名在加括号
		
		//分配内存
		a =new int[4];//需要的内存	
		//分配内存的同时进行初始化值
		b = new char[]  {'a','b','c'};//给b分配3个内存
		a[0]=1;//给a中元素赋值
		a[1]=2;//a中有三个元素
		a[2]=3;
		a[3]=4;
		
		//数组的遍历,数组的长度是几个i<几
		for(int i=0;i<b.length;i++) {//a赋值
			int temp=a[i];//定义temp存放a
			System.out.println(temp);
		}
		for(int temp : a) {
			
			System.out.println(temp);
		}//for循环遍历数组   5.4.1
	}

}

public class Fiveone {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//申明一维数组
		int[] a;//先括号在加数组名
		char b[];//先数组名在加括号
		
		//分配内存
		a =new int[4];//需要的内存	
		//分配内存的同时进行初始化值
		b = new char[]  {'a','b','c'};//给b分配3个内存
		/*a[0]=1;//给a中元素赋值
		a[1]=2;//a中有三个元素
		a[2]=3;
		a[3]=4;*/
		b[0]='a';
		b[1]='b';
		b[2]='c';
		//数组的遍历,数组的长度是几个i<几
		for(int i=0;i<b.length;i++) {//a赋值
			char temp=b[i];//定义temp存放a
			System.out.println(temp);
		}
		for(char temp : b) {//冒号隔开,前:数据类型;后:数组名
			
			System.out.println(temp);
		}//for循环遍历数组
	}

}

5.3.1:二维数组 :面

单个格子赋值

public class Fiveone {

	public static void main(String[] args) {
		//申明二维数组
        int[] [] a;
        char b[] [];//地址指向另一个数组
      //分配内存
        a =new int[4][3];//4列3行
    	b = new char[][] {{'z','h'},{'h','z'},{'h','z','d'}};//2*2,这时就会变成3*3
    	//分配内存的同时进行初始化值
    	a[0]=new int[]  {1,2,3};
    	a[1]=new int[] {4,5,6};
    	a[2]=new int[]  {7,8,9};
    	
    	a[3][0] =10;
    	a[3][1] =11;//给单个格子赋值
    	a[3][2] =12;

    	for(int i=0;i<a.length;i++) {//a赋值
			int[] temp=a[i];//定义temp存放a
			for(int j=0;j<temp.length;j++) {//再次遍历
				
				System.out.println(temp[j]);                             
				
			}				
			System.out.println();
		}
		for(char[] temp : b) {//冒号隔开,前:数据类型;后:数组名
			for(char c:temp ) {//再次遍历
				System.out.println(c);
				
			}
			System.out.println();
		}//for循环遍历数组
	
	
	}
	
	
	
}

例题5.1

public class GetDay {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int day[]=new int[] {31,28,31,30,31,30,31,31,30,31,30,30
 };
    for(int i=0;i<12;i++) {   //循环
     System.out.println((i+1)+"月有"+day[i]+"天");  //输出每有天数
    }
    }
}

例题5.2


public class Ma {                   //创建类

 public static void main(String[] args) {       //主方法
  // TODO Auto-generated method stub      
  int a[][] = new int[3][4];          //创建二维数组
  for(int i = 0;i<a.length;i++) {
   for(int j=0;j<a[i].length;j++) {           //循环遍历数组中的每个元素
    System.out.print(a[i][j]);        //将数组中的元素输出
   }
   System.out.println();           //输出空格
  }
 }

}

例题5.3


public class Ta {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int b[][] = new int[][] {{1},{2,3},{4,5,6}};     //定义二维数组
  for(int k=0;k<b[k].length;k++) {          //外循环循环一行
   for(int c =0;c<b[k].length;c++) {        //循环遍历二维数组中的每个元素
    System.out.print(b[k][c]);             //将数组中的元素输出
   }
   System.out.println();                //输出空格
  }
 }

}

5.4:数组的基本操作

例题5.4 

public class Tautog {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int arr2[][]= {{4,3},{1,2}};   //定义二维数值赋初始值
  System.out.println("数组中的元素:");//输出值
  int i=0;   //外层循环计数器变量,赋值为零
  for(int x[]:arr2) {  //外层循环变量变一维数组  for循环
   i++;
   int j=0;
   for(int e:x) {   //内层循环计数器变量
    j++;
    if(i==arr2.length&&j==x.length) {   //判断变量是二维数组中的最后一个元素,第二行第二列数字输出
     System.out.print(e);   //输出二位数组最后一个元素,优化判断
     
    }else   //如果不是
     System.out.print(e+"、");    //输出
   }
  }
 }
}
 

5.4.2:填充替换数组元素

数组中的元素定义完成后,可通过Arrays类的静态方法fill()对数组中元素进行替换

Arrays.fill(数组名,值);

例题5.5

import java.util.Arrays;

public class Fivetwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[] =new int[5];//创建int数组
		Arrays.fill(arr, 9);//使用同一个值进行填充,最后输出为9
		for(int i=0;i<arr.length;i++) {
			
			System.out.println("第"+i+"个元素是:"+arr[i]);//将元素输出
			
		}
		
		
		
		
	}

}//例题5.5

替换数组的部分元素(前索引值改后索引值不改

Arrays.fill(数组名,前索引,后索引,值);前索引和后索引的值

例题5.6

import java.util.Arrays;

public class Fivetwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[] =new int[] {45,12,2,10};//创建int数组
		Arrays.fill(arr, 1,2,8);//使用fill静态替换指定范围内的元素
		for(int i=0;i<arr.length;i++) {
			
			System.out.println("第"+i+"个元素是:"+arr[i]);//将元素输出
			
		}
		
		
		
		
	}

}//例题5.6

 按住ctrl键查看fill源码

5.4.3:对数组进行排序

Arrays.soft(数组名)

例题5.7

import java.util.Arrays;

public class Fivetwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[] =new int[] {23,42,12,8};//创建int数组
		Arrays.sort(arr);//使用sort进行排序
		for(int i=0;i<arr.length;i++) {
			
			System.out.println(arr[i]);//将元素输出
			
		}
		
		
		
		
	}

}//例题5.7

5.4.4:复制数组空位补0,溢出去掉

新数组名= Arrays.copyOf(旧的数组名,新数组长度);多种重载形式,类型多样

import java.util.Arrays;

public class Fivetwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[] =new int[] {23,42,12};//创建int数组
		int newarr[]=Arrays.copyOf(arr,5);//创建新的数组并复制,长度有五位
		          
		for(int i=0;i<newarr.length;i++) {
			
			System.out.println(newarr[i]);//将新元素输出
			
		}
		
		
		
		
	}

}//例题5.8

当新数组长度为五,比旧的数组长,空位补零

 当新数组长度为二,比旧的数组短,取该有的位置,溢出去掉,按顺序去掉

import java.util.Arrays;

public class Fivetwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[] =new int[] {23,42,12};//创建int数组
		int newarr[]=Arrays.copyOf(arr,2);//创建新的数组并复制
		          
		for(int i=0;i<newarr.length;i++) {
			
			System.out.println(newarr[i]);//将新元素输出
			
		}
		
		
		
		
	}

}//例题5.8

5.4.4.2复制数组的部分元素 copyOfRange(的数组名,前索引,后索引,新数组长度);

import java.util.Arrays;//导入java..Arrays

public class Fivetwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[] =new int[] {23,42,12,84,10};//创建int数组
		int newarr[]=Arrays.copyOfRange(arr,0,3);//创建新的数组并复制
		          
		for(int i=0;i<newarr.length;i++) {//遍历
			
			System.out.println(newarr[i]);//将新元素输出
			
		}
		
		
		
		
	}

}//例题5.9

 5.4.5:查询数组先排序后查询

索引=Arrays.binarySearch(数组名,元素);

import java.util.Arrays;//导入java..Arrays

public class Fivetwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int ia[] =new int[] {1,8,9,4,5};//创建int数组
		Arrays.sort(ia);//数组排序
		int index = Arrays.binarySearch(ia, 4);//查找4的位置
		 
		        System.out.println("4的索引位置是:"+index);//将索引输出
			
		}
		
		
		
		
	}

//例题5.10

 数组如果不进行排序

索引值会变成负数

 5.4.5.2(前索引含后索引不含

索引=Arrays.binarySearch(数组名,前索引,后索引,元素);

例题5.11

import java.util.Arrays;//导入java.utill.Arrays

public class Fivetwo {

	public static void main(String[] args) {
		

		String str[]=new String []{"ab","cd","ef","yz"};//创建str数组
		Arrays.sort(str);//数组排序
		int index = Arrays.binarySearch(str,0,2,"cd");//查找cd的位置
		 
		        System.out.println("cd的索引位置是:"+index);//将索引输出
			
		}
		
		
		
		
	}

//例题5.11

 前索引可以找到在区间内 

import java.util.Arrays;//导入java.utill.Arrays

public class Fivetwo {

	public static void main(String[] args) {
		

		String str[]=new String []{"ab","cd","ef","yz"};//创建str数组
		Arrays.sort(str);//数组排序
		int index = Arrays.binarySearch(str,0,2,"ab");//查找cd的位置
		 
		        System.out.println("ab的索引位置是:"+index);//将索引输出
			
		}
		
		
		
		
	}

//例题5.11

后索引不包含在区间

import java.util.Arrays;//导入java.utill.Arrays

public class Fivetwo {

	public static void main(String[] args) {
		

		String str[]=new String []{"ab","cd","ef","yz"};//创建str数组
		Arrays.sort(str);//数组排序
		int index = Arrays.binarySearch(str,0,2,"ef");//查找cd的位置
		 
		        System.out.println("ef的索引位置是:"+index);//将索引输出
			
		}
		
		
		
		
	}

//例题5.11

 

5.5 数组排序算法

5.5.1冒泡排序

它排序数组元素的过程总是在将小的数往上放,较大的竖往后放类似于水中气泡往上升的动作,所以称为冒泡排序。

5.5.2、直接排序

选择排序也叫直接排序,它的排序速度比冒泡排序要快一些。

5.5.3、反转排序

就是以相反的排序,把原有的数组内存重新排序。反转排序的基本思想比较简单,把数组的最后1个元素和第1个元素替换,倒数第2个元素与第2个元素替换,以此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值