第4章数组

数组

1.一维数组

定义数组

在Java中,定义数组的语法有如下两种

数据类型[] 数组名=new数据类型[数组长度]

或:

数据类型 数组名[]=new数据类型[数组长度]

  • 定义数组时一定要指定数组名和数组类型。
  • 必须书写"[]",表示定义了一个数组,而不是一个普通的变量。
  • “[数组长度]”决定连续分配的空间个数,通过数组的length属性可获取此长度。
  • 数组的数据类型用于确定分配的每个空间的大小。
数组元素分配的初始值
数组元素类型默认初始值
byte、short、int、long0
float、double0.0
char“\u0000"
booleanfalse
引用数据类型null

2.数组元素的表示与赋值

例如:

scores[0]=65;//表示为scores数组中的第一个元素赋值65

scores[1]=87;//表示为scores数组中的第二个元素赋值87

3.数组的初始化

数组初始化的语法格式:

数据类型[]数组名={值1,值,值3,……,值n};

或者:

数据类型[]数组名=new数据类型[]{值1,值2,值3,……,值n};

int scores[]={75,67,90,100,0};//创建一个长度为5的数组scores

或:

int scores[]=new int[]{75,67,90,100,0};

4.遍历数组

在编写程序时,数组和循环往往结合在一起使用,可以大大地简化代码,提高程序的编写效率。通常使用for循环遍历数组

创建整型数组,循环输出数组元素

实现步骤:

(1)初始化整型数组

(2)以循环变量i为数组下标,循环输出数组元素

示例:

public static void main(String[] args) {
       int scores[]= {75,67,90,100,0};//创建有五个元素的整型数组
       for(int i=0;i<scores.length;i++) {//length等于5
           //每次循环i的值相当于数组下标
           System.out.println("scores["+i+"]="+scores[i]);
       }

}

增强for循环

语法:

for(元素类型 变量名:要循环的数组或集合名){……}

第一个元素类型时数组或集合中元素的类型,变量名在循环时用来保存每个元素的值,冒号后面是要循环的数组或集合名称。

步骤:

(1)初始化整型数组

(2)使用增强for循环

示例:

public class For1 {

    public static void main(String[] args) {
        int scores[]= {75,67,90,100,0};
        for(int i:scores) {
            System.out.println("数组元素值依次为:"+i);
        }
    }
}

注意:变量i的类型必须和数组scores元素的类型保持一致。

数组添加

    public static void main(String[] args) {
        //数组添加
        int index=0;
        String[] phones= {"iPhone4","iPhone4s","iPhone5",null};
        for(int i=0;i<phones.length;i++) {
            if(phones[i]==null) {
                index=i;
                break;
            }
        }
        if(index!=0) {
            phones[index]="iPhone5S";
            for(int i=0;i<phones.length;i++) {
                System.out.println(phones[i]);
            }
        }else {
            System.out.print("数组已满");
           }

     }

}

分析:

index变量相当于一个”监视器“。赋初始值”-1“是为了和数组下标的0、1、2等区别开来。遍历数组中的元素,如果发现null就会把i赋值给index,相当于找到null的下标,此时使用break跳出循环。

随后进入下一个if语句,首先判断index的值是否发生了变化,如果有变化(不等于-1时),说明发现了null的元素,phones[index]=”iPhone5S“;因为index在上一个if语句中已经重新赋值为null下标值,这时直接找到那个空的位置赋值为”iPhone5S“即可

数组修改

    public static void main(String[] args) {
        //数组修改
        int indexNew=-1;
        String[] phones= {"iPhone3G3经典","iPhone4革新","iPhone4s变化不大","iPhone5"};
        for(int i=0;i<phones.length;i++) {
            if(phones[i].equals("iPhone5")) {//equals()方法用来比较值是否相等
                indexNew=i;
                break;
            }
        }
        if(indexNew!=-1) {
            phones[indexNew]="iPone5掉漆";
            for(int i=0;i<phones.length;i++) {
                System.out.println(phones[i]);
            }
        }else {
            System.out.print("不存在iphone5");
        }
    }

分析:

第一个if语句的作用与数据添加类似,第二个if语句的作用是找到修改的位置,对该位置重新赋值。

数组删除

    public static void main(String[] args) {
        //数组删除
        String[] phones= {"iphone3GS经典","iphone4革新","iPhone4变化不大","iPhone5掉漆"};
        int index=-1;
        for(int i=0;i<phones.length;i++) {
            if(phones[i].equals("iphone3GS经典")) {
                index=i;
                break;
            }
        }
        if(index!=-1) {
            for(int i=index;i<phones.length-1;i++) {
                phones[i]=phones[i+1];
            }
            phones[phones.length-1]=null;
        }else {
            System.out.println("没有您要删除的内容!");
        }
        for(int k=0;k<phones.length;k++) {
            System.out.println(phones[k]);
        }
    }
}

分析
“phones[i]=phones[i+1];"表示此程序从0位置开始把1位置的值向前移一位,”phones.length-1"等于3,当i的值等于3的时候,停止for循环,这时把最后以为赋值给null,此时数组中的“iPhone3GS”被删除,后面的数据也完成了移位。

二维数组

二维数组的使用

1.初始化二维数组

代码:

int[][] scores=new int[][]{{90,85,92,78,54},{76,63,80},{87}};

或者:

int scores[][]={{90,85,92,78,54},{76,63,80},{87}};

9085927854
766380  
87    

 

2.Arrays类

Arrays类的常用方法介绍
方法返回类型说明
equals(array1,array2)boolean比较两个数组是否相等
sort(array)void对数组array的元素进行升序排列
toString(array)String将一个数组array转换成一个字符串
fill(array,val)void把数组array的所有元素都赋值为val
copyOf(array,length)与array数据类型一致把数组array复制成一个长度为length的新数组
binarySearch(array,val)int查询元素val在数组array中的下标

Arrays类的应用

1.比较两个数组是否相等

Arrays类的equals()方法用于比较两个数组是否相等,相等为true;否则为false。

public static void main(String[] args){

        int[]arr1= {10,50,40,30};
        int[]arr2={10,50,40,30};
        int[]arr3= {60,50,85};
        System.out.println(Arrays.equals(arr1,arr2));//判断arr1,arr2的长度及元素是否相等
        System.out.println(Arrays.equals(arr1,arr3));//判断arr1,arr3的长度及元素是否相等

}

2.对数组的元素进行升序排列

  • 初始化一个整型二维数组
  • 使用for循环遍历二维数组
  • 使用Arrays类的sort()方法对二维数组的元素进行升序排列
  • 使用for循环遍历二维数组的元素并输出

public static void main(String[] args){

        int array[][]= {{80,66},{70,54,98},{77,59}};
        for(int i=0;i<array.length;i++) {
            String str=(i+1)+"班";
            Arrays.sort(array[i]);//升序
          System.out.println("成绩排序后:"+str);
          for(int j=0;j<array[i].length;j++) {
              System.out.println(array[i][j]);
           }
        }

3.将数组转换成字符串

public static void main(String[] args){

        int[]arr= {10,50,40,30};
        Arrays.sort(arr);//将数组按升序排列
        System.out.println(Arrays.toString(arr));//将数组arr转换为字符串并输出

}

4.将数组所有元素赋值为相同的值

public static void main(String[] args){

        int[] arr= {10,50,40,30};//初始化整型数组
        Arrays.fill(arr,40);//替换数组元素
        System.out.println(Arrays.toString(arr));//将数组arr转换为字符串并输出

}

5.将数组复制成一个长度为设定值的新数组

public static void main(String[] args){

        int[] arr1= {10,50,40,30};
        int[]arr2=Arrays.copyOf(arr1,3);//将aar1复制成长度为3的新数组arr2
        System.out.println(Arrays.toString(arr2));
        int[]arr3=Arrays.copyOf(arr1,4);//将arr1复制成长度为4的新数组arr3
        System.out.println(Arrays.toString(arr3));
        int[]arr4=Arrays.copyOf(arr1,6);//将arr1复制成长度为6的新数组arr3
        System.out.println(Arrays.toString(arr4));

}

6.查找元素在数组中的下标

public static void main(String[] args){

        int[]arr= {10,50,40,30};
        Arrays.sort(arr);//先按升序排列
        int index=Arrays.binarySearch(arr,30);//查找30的下标
        System.out.println(index);
        index=Arrays.binarySearch(arr,50);//查找50的下标
    System.out.println(index);
    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值