20160714 数组

class  笔记5
{
	public static void main(String[] args)                       
	/*
	    数组定义:同一种类型数据的集合;
		好处:可以自动给数组中的元素从0编号,方便操作这些元素;
		格式一:元素类型 [] 数组名=new 元素类型 [元素个数或数组长度];
		         int    []  array=new    int      [5];
		格式二:元素类型 [] 数组名=new 元素类型 [] {};
		       int      []  array1=new int     [] {1,2,3,4,5};
			   int      []  array2={1,2,3,4};

	*/	



	/*{                                                    //数组的定义
		int [] array=new int [5];                        //格式1:
		System.out.println(array.length); 

		int [] array1=new int []{1,2,3,4,5};             //格式2:
		System.out.println(array1.length);

		int [] array2={1,2,3,4};
		System.out.println(array2.length);

        double [] douArray={1,2,3,4,5,6};
		System.out.println(douArray.length);

		double [] douArray1=new double []{4,5,6};
		System.out.println(douArray1.length);

		String [] strArray=new String [10];
		String [] strArray1={"123","432","345"};
		System.out.println(strArray1.length);
}
*/

/*
       int [] iArray=new int [] {1,2,3,4,5};          //数组内容提取
	   int i= iArray[2];
	   System.out.println(i);

      String [] strArray=new String[]{"111","222"};
	  String s=strArray[1];
	  System.out.println(s);
*/

	  /*
	    java虚拟机内存结构划分:
		程序计数器(program Counter Resister),堆(Heap),栈(Stack),本地栈(Native Stack),方法区(Method Area)

		栈内存到堆内存:存放的是堆内存的地址    扩展!!!
	  */
   //   System.out.println(strArray);    //输出结果:[Ljava.lang.String;@1db9742
     
  //    int [] array3=new int[3];          //默认初始值
//	  System.out.println(array3[0]);      //输出结果:0

     // int [] array4=new int[3];
	//  System.out.println(array4[3]);     //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3   "输出角标越界"

   /*   int [] array5=new int[3]; 
	  array5[0]=123;
	  array5[1]=23;
	  array5[2]=3;
	  System.out.println(array5[0]); 
*/
	 // int [] array6=null;               //空指针异常      Exception in thread "main" java.lang.NullPointerException
	  //System.out.println(array6[1]);

     /*
	 int [] array7=null;  
	  if(array7!=null){
	  System.out.println(array7[1]);
	  }else{
	  System.out.println("is null");
	  }
	  if(array7==null){
	  System.out.println("is not null");
	  }
*/

	
{    // printArray();                               //只能某一个单独执行

		   addValue();
		}
/*    public static void printArray()
{    
	int[] array=new int []{1,2,3,4,5,6,7,8};
	for(int i=0;i<array.length;i++){
		if(i<5)
	System.out.println(array[i]);
	}
	
}
*/


	public static void addValue(){
	int [] array=new int [5];
	for(int i=0;i<array.length;i++)
	{
	array[i]=2*i+1;
	System.out.print("*");
	}
	
	for(int j=0;j<array.length;j++)
		{
	  System.out.print(array[j]);        //复制循环执行完毕,再执行输出循环
	}                                    //输出结果:*****13579

	}
	
}

***************************************************************************************
<pre name="code" class="java">/**
   判断数组内的最大,最小值  

*/
class 笔记501 
{
	
	public static void main(String[] args)                 //数组常见操作
	{
		int [] array={ 1,3,5,6,10,12,18,19};                          
		int maxValue=getMaxValue(array);                   //Max
		System.out.println(maxValue);

        int minValue=getMinValue(array);                   //Min
		System.out.println(minValue);

		 sortAsc(array);

		 for(int i=0;i<array.length;i++)                  //冒泡排序
			 {
			 System.out.print(array[i]+",");
		     }
 System.out.println();
 System.out.println("*****************");                //分隔

	     sortAsc1(array);
		 
		 for(int i=0;i<array.length;i++)                  //选择排序
			 {
			 System.out.print(array[i]+",");
		     }
   System.out.println();                                   //分隔
   System.out.println("***********************");

  int index=binarySearch(array,0,array.length,20);          //二分查找
  System.out.println(index);


	}


            //列最大值
public static int getMaxValue(int[]array){
	int tmp=-1;
	if(array!=null) {                                      //判断空指针
		int tmpValue=array[0];
	   for (int i=0;i<array.length ;i++ )          //为何i=0也可输出最大值,都一样
	   {  if(array[i]>tmpValue)       //进行两个值的比较,将大的值保留下来进行下一轮的比较
           tmpValue=array[i];
	   }
	   tmp=tmpValue;
	}                                         


	return tmp;
	}
                
				
				//列最小值
	public static int getMinValue(int [] array){
	int tmp=-1;
    if(array!=null)
		{
		int tmpValue=array[0];
		for (int i=0;i<array.length ;i++ )         //5,8,2,6,9
		{
			if(array[i]<tmpValue)                  //内部循环完赋值
            tmpValue=array[i];
		}
		   tmp=tmpValue;
	    }

	return tmp;
	}
	

	/*
	冒泡排序
	    从小到大的排序
	*/
    public static void sortAsc(int[] array)
   {
	if(array!=null)
	  {
	    for(int i=0;i<array.length;i++)
			{
			for(int j=0;j<array.length-1-i;j++)
				{
				if(array[j]>array[j+1])
					{
					int tmp;
					tmp=array[j];
					array[j]=array[j+1];
					array[j+1]=tmp;
				    }
			    }
		    }
	  }
	
	
	}

   /*
   选择排序    
   
   第一个逐渐对比到尾部


   */
    public static void sortAsc1(int[]array)
		{
		if(array!=null)
			{
			 for(int i=0;i<array.length;i++)
				 {
				 for(int j=i+1;j<array.length;j++)
					 {
					 if(array[i]>array[j])
						 {
						 int tmp;
						 tmp=array[i];
						 array[i]=array[j];
						 array[j]=tmp;
					     }
				     }
			     }
		    }
	    }
 /*
 递归排序

 */









 /*
 二分查找:  只适合于排序好的数列

 1,3,5,6,10,12,18,19
 目标:快速找到12所在的位置

 1,3,5,6  10  12,18,19
 第一次查找
10-12
10,12,18,19

12-12
这个数的脚标就是所需要查找的数字
 */
  public static int binarySearch(int[]array,int beginIndex,int endIndex,int findValue)
	                            //     数组        0          数组长度        18
	  {
	  if(array!=null)
		  {
           int middleIndex=(beginIndex+endIndex)/2;     //middleIndex=4;               6
		   int middleValue=array[middleIndex];         //middleValue=array[4]=10;     array[6]=18;
		   if(middleValue==findValue)                   //                            18==18;
			   {
			   return middleIndex;                     //                            return 6;(最终结果)
		       }
			   else if(middleValue<findValue)      //10<18                            //递归,自己调用自己
				   {
				   return binarySearch(array,middleIndex,endIndex,findValue);
				                     //         4          8        18
			       }
				   else if(middleValue>findValue)
					   {
                        return binarySearch(array,beginIndex,middleIndex,findValue);
				       }
					   else
						   {
						   return -1;                              //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
					       }                                       // 例外;异议    通过                             越       界
	      }     
		  else
			  {
		      return -1;
			  }
      }



}

**********************************************************************************
<pre name="code" class="java">/**
  数组查找:(基本查找)
  需求:查询出数组中元素是5的脚标,只返回第一个元素的脚标
  结果:1.找到了 返回脚标
       2.找不到 返回-1


	   二分查找:每次查找都是从数组的中间开始查找,数据效率提高两倍
	            前提条件:数组本身要保证有序的
*/

class  笔记502
{
	public static void main(String[] args) 
	{
		System.out.println("输出脚标:"+getIndex(9));


		int[][]array=new int[3][2];          //二维数组

		System.out.println(array);          //输出内存地址
		System.out.println(array[0]);       //输出内存地址
		System.out.println(array[0][0]);       //默认 0


       //二维数组的遍历:
	   for (int y=0;y<array.length ;y++ )
	   {
		   for(int x=0;x<array[y].length;x++)
			   {
			   System.out.println(array[y][x]);
		       }
	   }
      

     int[][]array=new int[3][];
	 array[0]=new int[1];
	 array[1]=new int[2];
	 array[2]=new int[3];
	 //如何给二维数组赋值
	 array
    

    int[][]array={{1,2,3},{11,22},{110}};
	for (int x=0;x<array ; )
	{
	}

	}

	/*
	public static int getIndex(int num)                 //数组查找             //两个输出口
		{
		//定于数组
		int[]array=new int[] {2,3,6,5,7,8};

		for (int index=0;index<array.length ;index++ )
		    {
			if(array[index]==num)
				{
				return index;
			    }
		    }
			return -1;
	    }
*/
       public static int getIndex(int num)                                  //只有一个输出口
		{
		   int i=-1;
		//定于数组
		int[]array=new int[] {2,3,6,5,7,8};

		for (int index=0;index<array.length ;index++ )
		    {
			if(array[index]==num)
				{
			     i= index;
				 break;                                 //没有break,有重复数字,输出最后的数字的脚标
			    }
		    }
			return i;                                   //退出当前循环,直接return值
	    }

     /*
	 二维数组
	 格式1:int[][]array=new int[3][2];

	 格式2:int[][]array=new int[3][];
	 array[0]=new int[1];
	 array[1]=new int[2];
	 array[2]=new int[3];

	 格式3:int[][]array={{1,2,3},{11,22},{110}};


	 二维数组的遍历:

	 
	 */



}
******************************************************************************
 
<pre name="code" class="java">/**
进制转换
十进制转换成16进制
*/
class  HexDemon
{
	public static void main(String[] args) 
	{
		


		/*
		int num=60;//3c
		
		while(num>0)
			{
		     int tem=num & 15;
			 if (tem>9)
			 {
				 //转换成A--F
				 System.out.println((char)((tem-10)+'A'));
			 }
			 else
				 {
				 System.out.println(tem);
			     }

				 num=num>>>4;
			}
	*/


           toHex(60);

		  // toHex1(50);
	}   

	    //十进制转换为16进制
	    //发现一个问题:反过来输出
		//解决思路:使用数组存起来,最后将数组倒序输出
		//什么数组?字符数组
		//4字节  32位
		//0000 0000 0000 0000 0000 0000 0000 0000
    public static void toHex(int num)
		{
		char[]c=new char[8];//在内存中开辟一个空间储存了八个字符的数组对象
		int index=0;
		while (num>0)
		     {
			  int tem=num&15;
			  if(tem>9)
				  {
				  //A-F
				  c[index]=(char)((tem-10)+'A');
			      }
				  else
					  {
					  //0-9  转换成字符0-9
					  c[index]=(char)(tem+'0');
				      }
					  index++;
					  num=num>>>4;
		     }
			 //将数组倒序打印
			 for (int i=index-1;i>=0;i-- )
			 {
				 System.out.println(c[i]);
			 }
	    }
/*
0,1,2,3,4,5,6,7,8,9,11,12,13,14,15



思路:率先定义好16进制的字符数组,位与15后


*/
   /*    public static void toHex1(int num)
		{
		char[]c=new char[8];
		int index=0;
		while (num>0)
		     {
			  int tem=num&15;
			  if(tem>9)
				  {
				  //A-F
				  c[index]=(char)((tem-10)+'A');
			      }
				  else
					  {
					  //0-9  转换成字符0-9
					  c[index]=(char)(tem+'0');
				      }
					  index++;
					  num=num>>>4;
		     }
			 //将数组倒序打印
			 for (int i=index-1;i>=0;i-- )
			 {
				 System.out.println(c[i]);
			 }
	    }
*/

}

***********************************************************************************

/**
数据加密
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,然后将第一位和最后一位数字交换.
请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来

例:123456

输出:654321
     109876
	 609871


*/
class codetran 
{
	public static void main(String[] args) 
	{
		

		tranCode(123456);
	}

	public static void tranCode(int num)
		{
        
		String aS = String.valueOf(num);//将基本数据型态转换成 String 的 static 方法 
        char[] asC = aS.toCharArray();//ToCharArray 将字符串转换为字符数组
        int[]c=new int[8];
		int index=0;
        for(int i=0;i<asC.length;i++)
			{
 
        System.out.println(asC[i]);
		index++;
		    }
          System.out.println("************");
          for (int i=index-1;i>=0;i-- )
			   {
			    
			  	 System.out.print(asC[i]+" ");
				 //System.out.print(index+" ");
               }
 System.out.println();
 System.out.println("************");
              //以上部分完成数据倒序
           for(int i=index-1;i>=0;i--)
			{
			      c[i]=(asC[i]-48+5)%10;

			    


			System.out.print(c[i]+" ");
			   }
			  int ex;
			  ex=c[0];
			  c[0]=c[index-1];
			  c[index-1]=ex;

 System.out.println();
 System.out.println("************");

         for(int i=index-1;i>=0;i--)
			{
			   
			     

			System.out.print(c[i]+" ");
			   }


	     

          
	    }
}



 



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值