零基础小白JAVA学习笔记(五)


今天来学习数组,这是我个人学习中首次接触到的引用数据类型。

数组和之前学习过数据类型的不太一样,最大的区别就是,当我们定义一个变量,如int x=3;,这个x是在栈内在中开出一个空间,来存储x的值;当我们定义一个数组时,如int[] x=new int[5];, 这样会在栈内存中开辟一个名为x的空间,但其中的数据并不是之前定义的数组中的数据,而是一个“[I@c17164”这样的一个内存地址,用来指向在堆内存中建立的数组空间,与其中的数据相对应。

堆内存和栈内存的区别应该是在于

 

首先来学习下数组定义的方法

int[] arr= new int[2];    

int arr[]= new int[2];            //[]中为数组的长度,这两种定义方法没有区别;

              arr[0]=98;                    //[]中的数字代表数组中的角标,角标从0开始;

              arr[1]=99;

       int[]arr = {3,12,34,5,2,64,55,43,645,437,34,45};//{}中为数组中具体元素;


 

       因为数组是在程序运行时才建立的,所以如果你操作数组时,访问到的数组角标不存在时,在编译时是不会报错的,只有在运行时才会出现报错,报错如下:

 java.lang.ArrayIndexOutOfBoundsException: 3  后面的数字是错误的角标。

 

       数组中有一个可以直接获取数组中元素个数的属性.length,如果你需要知道一个数组中的元素个数,只需要通过数组名.length来直接获取即可。

 

       下面进行下数组中极常用到的遍历操作:

class  ArrDemo1

{

       public static void main(String[] args)

       {

              int[] arr = {3,5,32};

                     System.out.println("length="+arr.length);

                     for (int x=0;x<arr.length ;x++ )

              {

                     System.out.println("arr["+x+"]"+"="+arr[x]+";");

              }

       }

}


上面的代码就是最基本的一个遍历操作,打印了数组中的所有元素。

      

       遍历无非是之前循环语句的一个应用,接下来对于练习下遍历的实际应用。

 

定义一个功能,获取数组中的最大值(最小值).

class GetMax 

{

       //获取一个数组中的最大值并打印

 

       public static void main(String[] args)

       {

              int[] arr={3,9,12,4,15};

              System.out.println(getmin(arr));

              

       }

       public static int getmax(int[] arr)

       

       {

              int max=arr[0];

              for (int x=1;x<arr.length ;x++ )

              {

                     if (max<arr[x])

                     {

                            max=arr[x];

                     }

                     //以数组中的元素进行比较

              }

              return max;

              }

       public static int getmin(int [] arr)

       {

              int min=0;

                     for (int x=1;x<arr.length ;x++ )

                     {

                     if (arr[x]<arr[min])

                     {

                            min=x;

                     }

                     }

                     return arr[min];

//以角标位置来比较

       }

}


上面分别用以数组中的元素和角标进行了最大值的和最小值的比较,区别不大。

下面进行下排序问题的练习。

定义一个功能,使一个无序数组按升序(降序)排列。

class ArrDemo0 

{

       public static void main(String[] args)

       {

              int[] arr={6,8,4,21,3,2,7};

              printarr(arr);

              selectsort1(arr);

              printarr(arr);

              selectsort2(arr);

              printarr(arr);

       }

       //升序排列——选择排序

       public static void selectsort1(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])

                            {

                                   int temp = arr[x];

                                   arr[x]=arr[y];

                                   arr[y]=temp;

                            }

                     }

              }}

       //降序排列——冒泡排序

              public static void selectsort2(int[] arr)

              {for (int x=0;x<arr.length-1 ;x++ )

              {

                     for (int y=0;y<arr.length-x-1 ;y++ )

                     {

                            if(arr[y]<arr[y+1])

                            {

                                   int temp = arr[y];

                                   arr[y]=arr[y+1];

                                   arr[y+1]=temp;

                            }

                     }

              }}

              //打印数组

              public static void printarr(int[] arr)

              {

                     System.out.print("[");

                     for (int x=0;x<arr.length ;x++ )

                     {

                            if (x!=arr.length-1)

                                   System.out.print(arr[x]+",");

                            else

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

                     }

                     System.out.println("]");

              }

}


       从视频中可以知道,java中是有数组排序的功能的,需要在代码中写入import java.util.*;,然后在类中使用排序功能Arrays.sort(数组名);

 

    §数组中的查找操作

 

class Arrtest 

{

       public static void main(String[] args)

       {

              int[] jhw={-8,5,0,4,17};

              int index = getIndex(jhw,4);

              System.out.println(index);

       }

       public static int getIndex(int [] arr,int key)

       {

              for (int x=0;x<arr.length ;x++ )

              {

                     if (arr[x]==key)

                            return x;

              }

              return -1;

       }

}

/*此段代码可以查找到对应数组中的角标,若数组中的多个元素与查找元素匹配,则只查找第一个匹配元素的角标*/


 

u       折半查找

class Arrtest2

{

       public static void main(String [] args)

       {

              int[] arr={-3,7,12,21,43,51,55,64,99};

              int index = HalfSearch(arr,43);

              System.out.println(index);

       }

       public static int HalfSearch(int[] arr,int key)

       {

              int min,max,mid;

              min = 0;

              max = arr.length-1;

              mid = (min+max)/2;

                     while (arr[mid]!=key)

                     {

                            if (key>arr[mid])

                                   min = mid+1;

                            else if (key<arr[mid])

                                   max = mid-1;

 

                            mid = (max+min)/2;

                     }

              return mid;

       }

}
/*这种查找方法通过不断折半判断来查找对应角标位置,这种方法需运用在有序数组中。*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值