黑马程序员-自学第4天

 

----------------------android培训java培训、期待与您交流! ----------------------

 

一:数组

      数组就是相同类型的元素的集合,元素在数组中会有自己的编号,编号从0开始

      数组有主要两种定义方式:

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

                    通常使用第一种定义方式

      数组有两种初始化方式:

          1.静态初始化:       数据类型 [ ] 数组名 = new  数据类型 {值1, 值2,....}   或者   数据类型 [ ] 数组名 = {值1, 值2,....} 

          2.动态初始化:       数组名[0]=值1;       数组名[1]=值2;    .......

      获取数组的长度:       数组名.length

 

      获取数组的最值:

                                  

/*
获取数组中的最大值和最小值
*/

public class ArrayTest
{	
   public static void main(String [] args)
	{
		//定义一个数组
		int [] x={-5,-8,-12,-3,-6,-1,-30};
		Arrays(x);
	}	
	
	public static void Arrays(int [] x)
	{
		int max=x[0];	//存放最大值
		int min=x[0];	//存放最小值
		//计算最大值
		for(int i=1; i<x.length; i++)
		{
			if(x[i]>max)
			         max=x[i];	       //如果x[i]大于max,就把x[i]赋值给max
			
		}
		//计算最小值
		for(int i=1 ;i<x.length; i++)
		{
			if(x[i]<min)
				min=x[i];	       //如果x[i]小鱼min,就把x[i]赋值给min		
		}
		System.out.println("最大值是:"+max);
		System.out.println("最小值是:"+min);
	}
}

 

        查找数组中指定元素的脚标:

                     折半查找:前提是数组中的元素是有序的

/*
折半查找,查找数组中指定元素的下标
前提:数组元素必须是有序的
*/

public class helfArrays
{
	
	public static void main(String [] args)
	{
		int [] arr={2,5,7,9,10,12,15};	//定义一个有序的数组
		int index=HelfArrays(arr,10);
		System.out.print(index);
	}

	//折半查找
	//参数中为什么还有要数组? 因为数组也是不确定的,需要从外界传入
	//arr 外界传入的数组;  key 要查找的数
	public static int HelfArrays(int [] arr, int key)
	{
		int min=0;		//折半查找左边的临界点(最小值)
		int max=arr.length;	//折半查找右边的临界点(最大值)
		int mid;			//折半查找的中间量
		
		while(min<=max)		//只要最小值<最大值就可以进行折半查找 ,这里是min<=max,因为如果只有一个数的时候,最小值等于最大值
		{
			mid=(min+max)/2;	//取得中间量
			if(key>arr[mid])	//如果要查找的值>中间量下表对应的值,if条件不能写成a[key]>mid,这个中的key是a数组的角标,而不是元素
			{   
				min=mid+1;			//最小值往右移,移到中间值+1的位置
			}
			else if(key<arr[mid])//如果要查找的值<中间量下表对应的值
			{
				max=mid-1;			//最大值往左移,移到中间值-1的位置
			}
			else					//找到了这个数(要找的数刚好是中间值对应的值)
				return mid;			//返回中间值
		}
		return -1; 	 				//数组中没有这个数,返回-1
	}
}


 


二:排序

     选择排序:

 

/*
选择排序
*/

public class ArraTest2
{
		public static void main(String [] args)
		{
			//定义一个数组
			int []  x={3,2,4,1,5,8,10};
			//排序前;
			ShowArrays(x);		
			//排序
			SelectArray(x);			
			//排序后
			ShowArrays(x);
		}
		
		//开始排序
		public static void SelectArray(int [] x)
		{			
			for(int i =0; i<x.length; i++)	
			{
				for(int y=(i+1); y<x.length-1; y++)    //依次和第一个,第二个,第三个....元素对比
				{
					if(x[i]>x[y])
					{	
						int temp=x[i];						
						x[i]=x[y];
						x[y]=temp;
					}
				}	
			}			
		}
		
		//遍历数组
		public static void ShowArrays(int [] x)
		{
			for(int i=0; i<x.length; i++)	
			{
				System.out.print(x[i]+" ");	
			}
			System.out.println(" ");	
		}
}


        冒泡排序:  两个相邻元素比较,每比较一圈,就少一个元素

 

/*
冒泡排序
*/

public class BubbleSort
{
		public static void main(String [] args)
		{	//定义数组
				int []  arr={3,5,8,6,1,4,2};
				//排序前
				ShowArray(arr);
				//排序
				BubbleSort(arr);
				//排序后
				ShowArray(arr);
		}
		
		//遍历数组
		public static void ShowArray(int [] a)
		{
			for(int i=0; i<a.length; i++)
			{
				System.out.print(a[i]);	
			}	
			System.out.println("");
		}
		
		//排序
		public static void BubbleSort(int [] a )
		{
			//冒牌排序是相邻两个数比较,最后一个数后面没有值,所以长度1,
			for(int i=0; i<a.length-1; i++)
			{
				//每圈排序后,要排序的值就减少i个
				for (int y=0; y<a.length-1-i; y++)
				{
					if(a[y]>a[y+1])
					{
						int temp=a[y];
						a[y]=a[y+1];
						a[y+1]=temp;	
					}
				}
			}	
		}
}

 


三: 进制转换

         查表法:适用于十进制转换成各种进制类型

/*
查表法
十进制转二进制,八进制,十六进制的通用方法
*/

public class TenToAll
{
	public static void main(String [] args)
	{	
		System.out.println("转二进制:");	
		newToBin(60);

		System.out.println("\n转八进制:");
		newTo8(60);

		System.out.println("\n转十六进制:");
		newTo16(60);
	}

		//十进制转二进制
		public static void newToBin(int num)
		{
			newToAll(num,1,1);
		}

		//十进制转八进制
		public static void newTo8(int num)
		{
			newToAll(num,7,3);
		}

		//十进制转十六进制
		public static void newTo16(int num)
		{
			newToAll(num,15,4);
		}
	
	//传入三个参数,num是要转化的值,base是要 与 的值,offset是要右移的值
	public static void newToAll(int num,int base, int offset)
	{		
			char [] arr={'0','1','2','3','4',	         //从0开始,不是从1开始
				     '5','6','7','8',
				     '9','A','B','C',
				     'D','E','F'};	
									 
			char [] temp=new char[32];              	//用于存放得到的值
			int pos=temp.length;			//操作循环的指针
			if(num == 0)				//如果输入的值是0,就直接打印
				{
					System.out.print(0);
					return;
				}

			while(num != 0)
			{
				int n=num&base;			//取最低4位的进制值
				temp[--pos]=arr[n];		//查表
				num>>>=offset;
				
			}
			for(int i = pos; i< temp.length ; i++)
			{
				System.out.print(temp[i]);
			}
	}
}

 

 

 

----------------------android培训.java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值