黑马程序员---Java 数组(三)

-----------android培训java培训、java学习型技术博客、期待与您交流!------------    

一、概念

        同一种类型数据的集合。简单的来说就是一容器,用来装东西的。

        使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

       

         内存结构中的五个空间: 栈内存,堆内存,方法区,本地方法区,寄存器

               栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放

               堆内存:数组和对象,通过new建立的实例(实体)都存放在堆内存中

                             每一个实体都有内存地址值

                             实体中的变量都有默认初始化值

                             实体不在被使用,会在不确定的时间内被垃圾回收器回收

                   

                各个区的处理方法不同

 

二、一维数组的格式


         数组是一种单独的数据类型! 属于 引用类型!


        格式1

                          int []  arr = new int [3];  

                          int arr[] = new int[3];

        格式2

                                     如: int []  arr = new int []{1,2,3,4,5};

         简写的静态初始化格式 int []  arr = {1,2,3,4,5};

        其中:new是用来在堆内存中产生一个容器实体。




三、数组操作常见问题

    (1)、数组脚标越界异常(ArrayIndexOutOfBoundsException)

              int[] arr = new int[5];

              System.out.println(arr[8]);

            访问到了数组中的不存在的脚标时发生。

    (2)、空指针异常(NullPointerException)

              int[] arr = null;

             System.out.println(arr[0]);

             arr引用没有指向实体,却在操作实体中的元素时。


         遍历数组

                    int[] arr=new int[3];

                    for(int x=0; x<3; x++)

                 {

                System.out.printIn(arr[x]);

                 }


            练习题:1) 给定一个数组,获取数组中的最大值,以及最小值

          

         

     练习题2)两种数组排序方法:选择排序和冒泡排序

     先看一下思路:

      

   

/**
 要求:分别使用选择排序和冒泡排序对一个数组进行排序并打印
*/
  
class  Sort  
{  
    public static void main(String[] args)   
    {  
        int[] arr1= {9,8,7,4,56,3,2,44};  
		int[] arr2= {9,8,7,4,56,3,2,44};  

		swap1(arr1[0],arr1[1]);
       
        //selectSort(arr1);  //调用排序方法  
		//bubbleSort(arr2);  //调用冒泡排序方法
         
         for(int x = 0;x < arr1.length;x++)
			  {
                 // System.out.print(arr1[x]+",");

              }
			       System.out.print("\n");

	     for(int x = 0;x < arr2.length;x++)
			  {
                  System.out.print(arr2[x]+",");

              }
    }  
      
   /* 
   选择排序 
   1、先用0角标上的元素依次与其他元素进行比较,将较小值元素存放到0角标。 
   2、然后再拿1角标上的元素依次进行比较,以此类推。 
   */  
    public static void selectSort(int[] arr)  
    {  
        //外循环遍历数组  
        for (int x=0;x<arr.length-1;x++)  
        {  
            //内循环比较大小  
            for (int y=x+1;y<arr.length;y++)  
            {  
                //如果后一个元素比拿去比较的元素大,就交换两元素位置  
                if(arr[x]>arr[y])  
                {  
                    //arr[x]=arr[y];  
                    //arr[y]=temp;  
                    swap(arr,x,y);  
                }     
            }  
        }  
    }  


      /* 
    冒泡排序 
    1、先从头角标相邻两个元素之间进行比较,将较大值存放在后一个元素中,然后再与后一个元素的进行比较,直至最大值存放到最后一个元素中。 
    2、再重复1操作,每次计较次数减一,一圈比完后存放的较大元素不再参与比较。 
    */  
  
    public static void bubbleSort(int[] arr)  
    {  
		 System.out.print("swap1");

        for (int x=0;x<arr.length-1;x++)  
        {  
            for (int y=0;y<arr.length-1-x;y++)//-x:让没每一次比较的元素减少。-1:避免角标越界。  
            {  
                if(arr[y]>arr[y+1])  
                    //swap(arr,y,y+1);
				 
				swap1(arr[y],arr[y+1]);
				
            }  
        }  
    }  


  
  
    //互换方法  
    public static void swap(int[] arr,int x,int y)  
    {  
      int temp;
      temp=arr[x];
	  arr[x]=arr[y];
	  arr[y]=temp;

    }  
  
    public static void swap1(int x,int y)  
    {  
     // int temp;
     int temp=x;
	     x=y;
	     y=temp;

		 System.out.print("x="+x+";"+"y="+y);

    }  

}  


    注意:  选择排序:是从左往右,从小往大排

                 冒泡排序:是从右往左,小大往小排


    练习题:十进制转二进制 及十进制转十六进制

     

class hex
{
	public static void main(String[] args) 
	{
		//十进制转换为二进制
		int num=10;
		StringBuffer sbBin = new StringBuffer();
		StringBuffer sbHex = new StringBuffer();
		while(num>0)
		{
			sbBin.append(num%2);
			num=num/2;
		}
		System.out.println(sbBin.reverse());
		//System.out.printIn(sbBin.reverse());
	


               //十进制转换为十六进制
	
		num=60;dd
		for(int x=0;x<8;x++)
	    {
			int temp=num&15;
			if(temp>9)
				sbHex.append((char)(temp-10+'a'));
			else
				sbHex.append(temp);
			num=num>>>4;

		}
		System.out.println(sbHex.reverse());

	}

}

        练习题: 用查表法将十进制转换成十六进制和二进制!


四、数组中的数组(多维数组

        格式1 int[][] arr= new int[3][2];

        解释:以上格式表示定义了名称为arr的二维数组。有3个一维数组,每一个一维数组中有2个元素。一维数组的名称分别为arr[0],arr[1],arr[2]。给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78

        格式2 int[][] arr= new int[3][];


   

         注:此种格式中每一个一维数组都是默认初始化值nullint[][] arr= new int[3][] 中arr[0],arr[1],arr[2]的值都null

                  当int  arr[0]=new int[3] ; 时 arr[0]保存的是 int[3]的内存地址,如上图所示

   

         格式3int[ ][ ] arr = {{3,8,2},{2,7},{9,0,1,6}};//每一个一维数组中具体元素都初始化了。

            注:一种特殊定义写法:int[ ]x,y[ ]; x是一维数组,y是二维数组。

      

             一维数组的定义方式: int[ ]    x; int  x[ ];

             二维数组的定义方式: int[ ][ ]  y; int y[ ][ ];  int[ ] y[ ];


  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值