数组基础与运用

数组介绍

+ int类型的数组容器(byte short int) + double类型的数组容器(byte short int long float double)

数组的静态初始化

初始化

在内存中,为数组容器开辟空间

格式

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

例子:

:::tips
int[ ] array = new int[ ]{11,22,33};

double[ ] array2 = new double[ ]{11.1,22.2,33.3……};

:::

简化格式

数据类型[ ] 数组名={元素1,元素2,元素3,……};

数组的地址值

```plain int[] arr={1,2,3,4,5}; System.out.println(arr); //[I@b4c966a I表示数组里的元素都是int型的 D表示数组里的元素都是double型的 ```

数组元素的访问

索引
格式:数组名[索引]
int[] arr={1,2,3,4};
int number=arr[0];
System.out.println(number);//1
arr[0]=100;
System.out.println(arr[0]);//100
遍历
```plain int[] arr={1,2,3,4,5}; for(int i=0;i

练习

求遍历数组的和

public class 数组练习 {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int sum=0;
        for(int i=0;i

遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字

  public static void main(String[] args) {
        //定义一个数组储存
        int[] arr={1,2,3,4,5,6,7,8,9,10};
        //定义一个变量来统计数据
        int count=0;
        for(int i=0;i

遍历数组并改变数组

public class 遍历过程修改数组 {
    public static void main(String[] args) {
        /*定义一个数组,储存1,2,3,4,5,6,7,8,9,10
         遍历数组的每一个元素
         1.如果是奇数,则将当前的数字扩大两倍
         2.如果是偶数,则将当前数字变成二分之一*/


        //定义一个数组
        int[] arr={1,2,3,4,5,6,7,8,9,10};
        //遍历数组的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //i表示数组里面每一个索引
            //arr[i]依次表示数组里面的每一个元素

            //对每一个元素进行判断
            if (arr[i] % 2 == 0) {
                //偶数变为二分之一
                arr[i] = arr[i] / 2;
            } else {
                //奇数扩大两倍
                arr[i] = arr[i] * 2;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

数组的动态初始化

+ 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。 - 格式:数据类型[]数组名=new数组类型[数组长度];S - 范例: int[] arr=new int[3]; * 数组默认初始化值的规律 + 整数:0 + 小数:0.0 + 字符:'\u0000' + 布尔:false + 应用数据类型:null

数组练习

求最值

```java public class 求最值 { public static void main(String[] args) { //定义一个数组来储存5个值 int[] arr= {15,21,33,45,5}; //定义一个变量max用来储存最大值 int max = arr[0]; //循环定义每一个数组 //循环开头i=1可以提高效率,不用跟自己比 for (int i = 1; i < arr.length; i++) { //i索引 arr[i]元素 if (arr[i] > max) { max = arr[i]; } } System.out.println(max); } } ```

遍历数组求和

需求:生成10个1~100之间的随机数存入数组。 1)求出所有数据的和 2)求所有数据的平均数 3)统计有多少个数据比平均值小
import java.util.Random;

public class 遍历数组求和 {
    public static void main(String[] args) {
        //1.定义数组 动态初始化
        int[] arr = new int[10];
        //把随机数存入到数组当中
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            //每循坏一次,就会生成一个新的随机数
            int number = r.nextInt(100) + 1;
            //把生成的随机数添加到数组当中
            //数组名[索引]=数据
            arr[i] = number;
        }
        //1.求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum + arr[i];
        }
        System.out.println("数组中所有数的和为:" + sum);
        //平均值
        int avg = sum / arr.length;
        System.out.println("数组中平均值为:" + avg);
        //比平均值小
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < avg) {
                count++;
            }
        }
        System.out.println("在数组中,一共有" + count + "个数比平均值小");
        //遍历数组。验证答案
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}
运行结果:
数组中所有数的和为:576
数组中平均值为:57
在数组中,一共有4个数比平均值小
77 80 9 92 24 20 61 82 79 52 

交换数组的数据

需求:定义一个数组,存入1,2,3,4,5.交换首尾索引对应的元素。 交换前:1,2,3,4,5 交换后:5,2,3,4,1
public class 交换数组的数据 {
    public static void main(String[] args) {
        //定义数组储存数据
        int[] arr = {1, 2, 3, 4, 5};
        //利用循环交换数据
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            //交换变量i和变量j指向的元素
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

打乱数组中的数据

:::warning //如何获取数组中的随机索引 int[] arr = {1,2,3,4,5}; //索引范围:01234 random r = new random(5); int randomindex = r.nextInt(arr.length); system.out.println(randomindex);

:::

定义一个数组,存入1~5。要求打乱数组中的所有数据的顺序

import java.util.Random;

public class 打乱数组中的数据 {
    public static void main(String[] args) {
        //定义储存变量1~5
        int[] arr = {1, 2, 3, 4, 5};
        //遍历储存数组,从0索引开始打乱数据的顺序
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            //生成一个随机索引
            int randomIndex = r.nextInt(arr.length);
            //将随即索引指向的元素跟i指向的元素进行交换
            int temp = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

数组的内存图

![栈内存(main方法)主要是具体数据,堆内存可以是数组,在栈内存中用地址表示](https://i-blog.csdnimg.cn/img_convert/7d466e57c94137d52938cfbf740f7727.png)
  • 1.只要new出来的一定时在堆里面开辟了一个小空间。
  • 2.如果new出现多次,那么在堆里面有多个小空间,每个小空间都有各自的数据。

两个数组指向同一个空间的内存图

![](https://i-blog.csdnimg.cn/img_convert/34cfc8cfe79f847594af7cbb2a23a85f.png)
  • 当两个数字指向同一个小空间时,其中一个数组对小空间的值发生了变化,那其他数组再次访问的时候就是修改之后的结果了。

你可能感兴趣的:(java,算法,数据结构)