Java基础——数组的声明,初始化与使用


概念 数组就是同一种类型那个数据的集合,是一个容器,是引用类型,存储在堆中。

好处:可以自动给数组中的元素从0开始编号,方便操作这些元素
格式: 1. int[] arr=new int[5]; 创建一个长度为5 的,变量名为arr,类型为整型的数组。
      2. int[] arr=new []{5,6,8,3,4}
         int[] arr={5,6,8,3,4}


数组中常见问题:
1、数组角标越界 //ArrayIndexOutofBoundsException
2、空指针异常  //NUllPointerException 当引用没有任何指向,值为空的情况,该引用还在用于操作实体。


数组的操作:
1.获取数组中的数据,通常会用到遍历(for循环),arr.length代表数组的长度
代码:
  int[] arr=new int[5];
  for(int x=0;x<arr.length;x++)
  {
        arr[x];
  }


2.打印数组中的元素,元素间用逗号隔开。


   int[] arr=new int[5];
  for(int x=0;x<arr.length;x++)
  {
         if(x!=arr.length-1)
          System.out.print( arr[x]+",");
         else
           System.out.print( arr[x]);


  }


3.获取最值
      //定义一个方法,返回最大值角标
           public static int  getmax(int[] arr){


                      int max=0; //定义一个变量初始化数组的0角标值
for(int x=0; x<arr.length;x++){//循环遍历数组
if(arr[max]<arr[x]){//如果临时元素小于遍历到的元素
max=x;//将遍历到的值的角标付给临时变量角标
}
}
return max; //返回最大值角标
}
4.数组排序-选择排序:内循环结束一次,最值出现在头角标位置上,第一个依次和后面的几个相比较
      
      public static void  xuanze(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[y];
arr[y]=arr[x];
arr[x]=temp;

}

}
}




5.数组排序-冒泡排序:相邻的两个元素进行比较,第一圈,最值出现在最后。
       
         public static void  maopao(int[] arr){


for(int x=0; x<arr.length-1;x++){//控制比较的圈数
 
for(int y=0;y<arr.length-x-1;y++)//控制每圈比较的次数  -1是避免角标越界,-x是让每一次比较的元素减少
{
if(arr[y]>arr[y+1]){
int temp=arr[y+1];
arr[y+1]=arr[y];
arr[y]=temp;
}
}
}
6.数组置换
      
     public static void  maopao(int[] arr,int x, int y){




                             int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;


     }


7.数组的一般查找:获取key第一次出现在数组中的位置,如果返回-1,则不存在
    public static int  select(int[] arr,int key){

for(int x=0; x<arr.length;x++){
if(arr[x]==key){

return x;
}
}
return -1;
}


8.数组的折半查找:可以提高查找效率,但是必须是有序数组
第一种方式:
  先找到头角标 和尾角标  
  min =0 //头角标
  max=arr.length-1;//尾角标
  mid =(min+max)/2;//中间角标
  在要找得的值和中间角标不相等的情况下,循环查找。
  如果要找的值比中间角标值大的话,头角标就是中间角标+1;
  如果要找的值比中间角标小的话,尾角标就是中间角标-1;
  中间角标重新赋值 mid =(min+max)/2;//中间角标
   查找之后,如果头角标大于了尾角标的话 ,数组中就没有这个值,
第二种方式:
   如果头角标和尾角标之间有距离,也就是说头角标和尾角标小于等于尾角标的时候,就进行折半。否则不存在 返回 -1
   mid =(min+max)/2;//中间角标
   之后呢  如果要找的值比中间角标值大的话,头角标就是中间角标+1;
  如果要找的值比中间角标小的话,尾角标就是中间角标-1;

如果相等的话 就返回中间角标值。找到了


面试题:在有序的数组中,插入一个值,插入之后还保证数组是有序的。获取该元素在数组中的位置。

 返回的就是最小角标的值就是min的位置  。

二维数组:数组中的数组 
int[][] arr=new int [3][4];//定义了一个名称为arr的二维数组,这个二维数组中有3个一位数组,每一个一位数组中有四个元素,
                           //3代表的是二维数组的长度,4代表的是二维数组中每一个一位数组的长度。


int[][] arr =new int[3][];//


int[][] arr={{5,8,6,5},{4,5,2},{8,8,9}}


表示方式 


int[][] x; int x[][]; int[] x[];
arr.length:二维数组的长度
arr[0].length:二维数组中第一个一位数组的长度


二维数组的遍历


for(int x=0;x<arr.length;x++){
    
     for(int y=0;y<arr[x].length;y++)
     {
        sum=sum+arr[x][y];
      }


}


练习:
int[] x,y[]; x是一维数组,y是二维数组。相当于 int x[]    int y[][];
a)x[0]=y  //错误
b)y[0]=x  //正确 两边都是一维数组
c)y[0][0]=x; //错误
d)x[0][0]=y;//错误






























































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值