Java—数组


前言

  在Java中有一个重要的技术,数组。那什么是数组呢?数组,相当于一个容器,用来存储同一批类型的数据的。一般来说储存批量的数据,使用数组更为方便。


一、数组的定义

  数组的两种初始化的方式:静态初始化、动态初始化。

//静态初始化标准格式:
数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3};
//定义数组,用来存储多个年龄
int[] ages = new int[]{12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};

//静态初始化简化格式
数据类型[] 变量名 = {元素1,元素2,元素3};
//定义数组,用来存储多个年龄
int[] ages = {12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = {89.9, 99.5, 59.5, 88.0};


//以下两种写法是等价的。但是建议大家用第一种,因为这种写法更加普遍
int[] ages = {12, 24, 36};
int ages[] = {12, 24, 36}

动态初始化:不需要写出具体的元素,而是指定元素类型和长度。
注意: 使用动态初始化定义数组时,根据元素类型不同,默认值也有所不同。
int byte short long char---->0
boolean---->false
float double—>0.0
引用类型。String—>null
在这里插入图片描述

//动态初始化语法: 数据类型[]  数组名 = new 数据类型[长度]
int[] arr = new int[3];
/*案例需求:
	某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分作为选手得分。*/
public class Test {
    public static void main(String[] args) {
        //语法: 数据类型[] 数组名=new 数据类型[长度]
        double[] arr=new double[6];
        //控制台输入分
        Scanner sc=new Scanner(System.in);
        for(int i=0;i<arr.length;i++){
            System.out.println("录入第"+(i+1)+"位评委的成绩");
            double score = sc.nextDouble();
            //把上面输入的分数赋值给数组
            arr[i]=score;
        }

        //遍历数组请求数组中所有元素的和
        double sum=0;
        for(int i=0;i<arr.length;i++){
            sum+=arr[i];
        }
        System.out.println("平均值:"+sum/arr.length);
    }
}

二、数组的元素访问及修改

  数组中存储的数据我们叫做元素;而且数组中的每一个元素都有一个编号与之对应,我们把这个编号叫做索引,这个索引是从0依次递增的整数。
在这里插入图片描述

2.1 访问数组元素

//数组名可以找到数组对象的地址,再通过索引就可以定位到具体的元素
数组名[索引]
/索引:	   0   1   2
int[] arr = {12, 24, 36};
// 1、访问数组的全部数据
System.out.println(arr[0]); //12
System.out.println(arr[1]); //24
System.out.println(arr[2]); //36

//下面代码没有3索引,会出现ArrayIndexOutOfBoundsException 索引越界异常
System.out.println(arr[3]); 

2.2 修改数组中数据

// 修改数组中的数据
数组名[索引] = 新数据
arr[0] = 66;
arr[2] = 100;
System.out.println(arr[0]); //66
System.out.println(arr[1]); 0
System.out.println(arr[2]); //100

2.3 获取数组元素个数(数组的长度)

  除访问数组中的元素,我们也能获取数组中元素的个数,统称为数组的长度。

在数组名的后面加.length
int[] arr = {12, 24, 36};
数组中元素的个数: 数组名.length ===数组中元素的个数
System.out.println(arr.length);
数组的长度不等于数组的最大索引
数组的最大索引=数组的长度-1(arr.length-1)

2.4 循环访问数组元素

  利用数据长度,我们可以通过循环的方式去获取数组内的元素

 int[] arr={1,9,10,2,5,11};
 for(int i=0;i<arr.length;i++){ //注意: 索引不能等于数组长度
            System.out.println(arr[i]);
      }

三、生成随机数

  生成随机数的功能,在JDK中提供了一个类叫做Random,我们只需要调用Random这个类就可以生成随机数。
注意: nextInt(n)功能只能生成 0~(n-1)之间的随机数,不包含n.

import java.util.Random;
//导包。import java.util.Random; (idea会自动完成)
public class RandomDemo1 {
    public static void main(String[] args) {
        // 2、创建一个Random对象,用于生成随机数。
        Random r = new Random();
        // 3、调用Random提供的功能:nextInt得到随机数。
        for (int i = 1; i <= 20; i++) {
            int data = r.nextInt(10); // 0 - 9
            System.out.println(data);
        }
    }
}

//随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中	  结束游戏
import java.util.Random;
import java.util.Scanner;

public class RandomTest {
    public static void main(String[] args) {
        // 1、随机产生一个1-100之间的数据,做为中奖号码。
        Random r = new Random();
        int luckNumber = r.nextInt(100) + 1;

        // 2、定义一个死循环,让用户不断的猜测数据
        Scanner sc = new Scanner(System.in);
        while (true) {
            // 提示用户猜测
            System.out.println("请您输入您猜测的数据:");
            int guessNumber = sc.nextInt();

            // 3、判断用户猜测的数字与幸运号码的大小情况
            if(guessNumber > luckNumber){
                System.out.println("您猜测的数字过大~~");
            }else if(guessNumber < luckNumber){
                System.out.println("您猜测的数字过小~~");
            }else {
                System.out.println("恭喜您,猜测成功了");
                break; // 结束死循环
            }
        }
    }
}

四、数组运用

4.1查找数组中最大值和最小值

public class Test {
    public static void main(String[] args) {
        //求该数组中最大的元素
        int[] arr={10,23,43,23,56,67,12,56,67,32};
        //冒泡法
        int tmp=arr[0];
        //遍历
        for(int i=0;i<arr.length;i++){
             if(tmp<arr[i]){
                 tmp=arr[i];
             }
        }

        System.out.println("最大值:"+tmp);
    }
}

4.2数组排序-选择排序

public class Test {
    public static void main(String[] args) {
        int[] arr={10,23,43,23,1,67,12,56,67,3};
        for(int i=0;i<arr.length;i++){//排序的次数
            for(int j=i+1;j<arr.length;j++){
                  if(arr[i]<arr[j]){
                       //交换位置
                       int tmp=arr[i];
                       arr[i]=arr[j];
                       arr[j]=tmp;
                  }
            }
        }
        System.out.println("排好序的数组="+Arrays.toString(arr));
    }
}

4.3查找某个数据

 public static void main(String[] args) {
        int[] arr={10,23,43,23,1,67,12,56,67,3};
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你要查找的数:");
        int num=sc.nextInt();
        boolean flag=false;//表示不存在
        for(int i=0;i<arr.length;i++){
              if(num==arr[i]){
                  flag=true;
                  break;
              }
        }
        if(flag==true){
            System.out.println(num+"在数组中");
        }else{
            System.out.println(num+"不在数组中");
        }
    }

  **数组的二分查找:**用二分查找的方式查找数据需要该数组必须为排好序的数组。

public class Test {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int num=5;
        //声明最小数的索引
        int min=0;
        //声明最大数的索引
        int max=arr.length-1;
        //声明一个标志变量 false表示该数在数组中不存在  true表示该数在数组中存在
        boolean flag=false;
        while (min<=max){
             //声明中间数的索引
             int mid=(min+max)/2;
             if(arr[mid]>num){
                 //你要查找的数比中间数小,在中间数的左边查找,
                 max=mid-1;
             }else if(arr[mid]<num){
                 min=mid+1;
             }else{
                 //中间数和我们要找的数相同
                 flag=true;
                 break;
             }
        }

        if(flag==true){
            System.out.println("你要查找的数组在数组中");
        }else{
            System.out.println("不在");
        }
    }
}

4.4数组元素倒置

  所谓的元素倒置就是数组内元素位置互换,最后一个元素换到第一个元素的位置;倒数第二个元素与顺数第二个元素互换,依此类推。

public class Test {
    public static void main(String[] args) {
        int [] arr={1,2,5,4,6,7};
        for(int i=0;i<arr.length/2;i++){
              //i=0 arr[0]   arr[arr.length-1-0]
              //i=1 arr[1]   arr[arr.length-1-1]
              //i=2 arr[2]   arr[arr.length-1-2]
             // arr[i]   arr[arr.length-1-i]
              int tmp=arr[i];
              arr[i]=arr[arr.length-1-i];
              arr[arr.length-1-i]=tmp;
        }

        System.out.println("交换完成后="+Arrays.toString(arr));
        //交换后结果[7,6,4,5,2,1]
    }
}

五、增强循环-foreach

  增强循环foreach有区别于for循环

/*语法结构
for(数据类型 变量名:数组名){

​        //使用变量

}
*/
public class Test {
    public static void main(String[] args) {
        String [] arr={"胡三汉","令狐冲","欧晓","张三"};
        //根据索引循环
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
        
        System.out.println("\n=====增强循环=====");
        for (String s : arr) {
            System.out.print(s+"\t");
        }
    }
}

六、Arrays工具类

  在java中提供了一个对数据操作的工具类-Arrays.里面包含很多对数组操作的方法。比如: 排序,二分查找,复制数组,把数组转化为字符。

6.1 排序—sort

//用法:Arrays.sort(数组名)
public class Test {
    public static void main(String[] args) {
        int [] arr={1,7,2,6,5,4};
        Arrays.sort(arr);//工具。
        System.out.println("排序好后="+Arrays.toString(arr));
    }
}

6.2 二分查找—binarySearch()

//用法: Arrays.binarySearch(数组名,查找的数);
public class Test {
    public static void main(String[] args) {
        int [] arr={1,2,3,4,5,6,7,8,9}; //排序好
        int num=1;
        //完成二分查找并返回你查找到数据的索引.如果没有找到返回小于0数
        int i = Arrays.binarySearch(arr, num);
        if(i<0){
            System.out.println("你要查找的数字不在数组中");
        }else{
            System.out.println("找到你要的数据:"+i);
        }
    }
}

6.3 数组转化为字符串-toString()

//用法: Arrays.toString(数组名);
public class Test {
    public static void main(String[] args) {
        int [] arr={1,2,3,4,5,6,7,8,9}; //排序好
        System.out.println(arr);
        System.out.println(Arrays.toString(arr)); //打印数组对象
    }
}

6.4 复制并扩容数组—copyOf

//用法:  Arrays.copyOf(数组名,新数组的长度);
public class Test {
    public static void main(String[] args) {
        int [] arr={1,2,3,4,5,6,7,8,9}; //排序好
        int [] arr2=Arrays.copyOf(arr,arr.length*2); 
        //把arr中的内容复制到新数组中,并且新数组的长度是arr长度2倍

        System.out.println(Arrays.toString(arr2));
    }
}

总结

  以上就是本章要讲的内容,本文简单介绍了数组和Arrays工具类的使用,在文章中只是简单的列举常用的数组方法和Arrays工具类中常用的工具类。Arrays工具类提供了大量能使我们快速便捷地处理数组元素的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值