数组快速入门

发布于:2022-12-06 ⋅ 阅读:(283) ⋅ 点赞:(0)

数组使用注意事项和细节
1.数组是多个相同类型数据的组合,实现对这些数据的统一管理
2.数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。3.数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0, char \u0000,boolean false, String null
4.使用数组的步骤1.声明数组并开辟空间2给数组各个元素赋值3使用数组5.数组的下标是尽0开始的。
6.数组下标必须在指定范围内使用,否则报:下标越界异常,比如
int [arr=new int[5];则有效下标为0-4
7.数组属引用类型,数组型数据是对象(object)

 二维数组的静态初始化和动态初始化

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //静态初始化
        int[]array={1,2,3,4,5,6,7,8};
        //动态初始化
        double [] arr =new double[5];
        //循环输入
        Scanner sc=new Scanner(System.in);
        for (int i=0;i<arr.length;i++){
            System.out.println("请输入第"+(i+1)+"个元素");
            arr[i] = sc.nextDouble();
        }
        //循环输出
        for (int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
        for (int j=0;j<array.length;j++){
            System.out.println(array[j]);
        }
    }
}

数组应用案例
1.创建一个char类型的26个元素的数组,分别放置'A'-'Z‘。使用for循环访问
所有元素并打印出来。提示:char类型数据运算‘A'+1 ->'B‘ A'+2 ->'C

public class Test {
    public static void main(String[] args) {
        char[]c=new char[26];
        for (int i=0;i< c.length;i++){
            c[i]= (char) ('A'+i);
            System.out.println(c[i]);
        }
    }
}


2.请求出一个数组int[]的最大值{4,-1,9,10,23},并得到对应的下标。

public class Test {
    public static void main(String[] args) {
       int []array={4,-1,9,10,23};
       int max=array[0];
       int maxIndex=0;
       for (int i=0;i< array.length;i++){
           if (max<array[i]){
               max=array[i];
               maxIndex=i;
           }
       }
        System.out.println("数组中的最大值是:"+max+"对应的索引为:"+maxIndex);
    }
}



3.请求出一个数组的和和平均值。(养鸡场)

public class Test {
    public static void main(String[] args) {
       int []array={10,20,30,40,50,60};
       int sum=0;
       for (int i=0;i< array.length;i++){
          sum+=array[i];
       }
       int avg=sum/array.length;
        System.out.println("数组中所有元素的和是:"+sum+"平均值为:"+avg);
    }
}

4.数组反转

方法1

public class Test {
    public static void main(String[] args) {
        //定义一个数组
       int []array={10,20,30,40,50,60};
       int temp=0;
       int len=array.length;//计算数组的长度
       for (int i=0;i< array.length/2;i++){
           temp=array[array.length-1-i];
           array[array.length-1-i]=array[i];
           array[i]=temp;
       }
        System.out.print("[");
        for (int i=0;i< array.length;i++){
            if (i==array.length-1){
                System.out.print(array[i]);
            }else {
                System.out.print(array[i] + ",");
            }
        }
        System.out.print("]");
    }
}

方法2

public class Test {
    public static void main(String[] args) {
        //定义一个数组
       int []array={10,20,30,40,50,60};
       //定义两个索引变量  判断条件是初始索引小于等于结束索引
       for (int start=0,end=array.length-1;start<=end;start++,end--){
           //变量交换
           int temp=array[start];
           array[start]=array[end];
           array[end]=temp;
       }
       //遍历数组
        System.out.print("[");
        for (int i=0;i< array.length;i++){
            if (i==array.length-1){
                System.out.print(array[i]);
            }else {
                System.out.print(array[i] + ",");
            }
        }
        System.out.print("]");
    }
}

方法3

public class Test {
    public static void main(String[] args) {
        //定义一个数组
       int []arr={10,20,30,40,50,60};
       int []arr2=new int[arr.length];
        System.out.print("[");
        //逆序遍历
       for (int i=arr.length-1,j=0;i>=0;i--,j++){
           //重新赋值
           arr2[j]=arr[i];
           if (j==arr2.length-1) {
               System.out.print(arr[i] );
           }else {
               System.out.print(arr[i]+",");
           }
       }
        System.out.print("]");
    }
}

数组添加
要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java1)原始数组使用静态分配int[] arr = {10,  20,  30,40,50,60}
2)增加的元素,直接放在数组的最后arr2 = {10,20,30,40,50,60,70}

public class Test {
    public static void main(String[] args) {
        //数组扩容
       int []arr={10,20,30,40,50,60};
       //新数组的长度+1
       int []arr2=new int[arr.length+1];
       //拷贝数组元素
       for (int i=0;i<arr.length;i++) {
           arr2[i] = arr[i];
       }
       //新数组中添加最后一个元素
        arr2[arr2.length - 1] = 70;
       //新数组的地址重新赋值给旧数组
        arr = arr2;
        //重新遍历扩容后的数组
        System.out.print("[");
        for (int i=0;i<arr.length;i++) {
            if (i==arr[i]){
                System.out.print(arr[i]);
            }else {
                System.out.print(arr[i]+",");
            }
        }
        System.out.println("]");
    }
}


3)用户可以通过如下方法来决定是否继续添加,添加成功,是否继续? y/n

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        //数组扩容
       int []arr={10,20,30,40,50,60};
       do {
           //新数组的长度+1
           int []arr2=new int[arr.length+1];
           //拷贝数组元素
           for (int i = 0; i < arr.length; i++) {
               arr2[i] = arr[i];
           }
           //新数组中添加最后一个元素
           System.out.println("请输入你要添加的元素");
           arr2[arr2.length - 1] = sc.nextInt();
           //新数组的地址重新赋值给旧数组
           arr = arr2;
           //重新遍历扩容后的数组
           System.out.println("扩容后的数组");
           System.out.print("[");
           for (int i = 0; i < arr.length; i++) {
               if (i == arr[i]) {
                   System.out.print(arr[i]);
               } else {
                   System.out.print(arr[i] + ",");
               }
           }
           System.out.println("]");
           System.out.println("是否确认继续添加y/n");
           char c = sc.next().charAt(0);
           if (c=='n'){
               break;
           }
       }while (true);
        System.out.println("已退出程序");
    }
}


练习题
有一个数组{10,  20,  30,40,50,60}可以将该数组进行缩减,提示用户是否继续缩减,每次缩减最后那个元素。当只剩下最后一个元素,提示,不能再缩减。

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        //数组缩减
        int []arr={10,20,30,40,50,60};
        do {
            //新数组的长度-1
            int []arr2=new int[arr.length-1];
            //拷贝数组元素
            for (int i = 0; i < arr.length-1; i++) {
                arr2[i] = arr[i];
            }
            arr = arr2;
            //重新遍历缩减后的数组
            System.out.println("缩减后的数组");
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                if (i == arr[i]) {
                    System.out.print(arr[i]);
                } else {
                    System.out.print(arr[i] + ",");
                }
            }
            System.out.println("]");
            System.out.println("是否确认继续缩减y/n");
            char c = sc.next().charAt(0);
            if (c=='n'){
                break;
            }
            if (arr[0]==arr[arr.length-1]){
                System.out.println("你的数组中就剩一个元素了,无法继续缩减");
                break;
            }
        }while (true);
        System.out.println("已退出程序");
    }
}

冒泡排序法案例:BubbleSort
下面我们举一个具体的案例来说明冒泡法。我们将五个无序:24,69,80,57,13使用冒泡排序法将其排成一个从小到大的有序数列。

public class Test {
    public static void main(String[] args) {
        int temp=0;
        int []arr={24,69,80,57,13};
        for (int j=0;j<arr.length-1;j++) {
            for (int i = 0; i < arr.length - 1; i++) {
                if (arr[i] > arr[i + 1]) {
                    temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
            System.out.println("第"+(j+1)+"轮排序后的数组");
            System.out.print("[");
            for (int i=0;i<arr.length;i++) {
                if (arr[i]==arr[arr.length-1]){
                    System.out.print(arr[i]);
                }else {
                    System.out.print(arr[i]+",");
                }
            }
            System.out.println("]");
        }
    }
}

查找
介绍:
在java中,我们常用的查找有两种:1.顺序查找 2.二分查找
●案例演示:
1.有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘
中任意输入一个名称,判断数列中是否包含此名称【顺序查找】要求:如果找到了,就提示找到,并给出下标值。

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        String []arr={"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个名称:");
        String s = sc.nextLine();
        int index=-1;
        for (int i=0;i<arr.length;i++){
            //equals 用于比较字符串数据
            if (s.equals(arr[i])){
                System.out.println("恭喜你找到"+s+"该数据的下标为:"+i);
                index=i;
                break;
            }
        }
        if (index==-1){//没有找到
            System.out.println("没有找到该数据"+s);
        }
    }
}


二维数组的使用
快速入门案例:TwoDimensionalArray

请用二维数组输出如下图形

public class Test {
    public static void main(String[] args) {
       int[][]arr={{0,0,0,0,0,0},{0,0,1,0,0,0,},{0,2,0,3,0,0},{0,0,0,0,0,0}};
       //遍历二维数组的每个元素
       for (int i=0;i< arr.length;i++){
           //遍历二维数组中的每个元素(数组)
           //arr[i] 表示二维数组中的每个元素 arr[0]表示二维数组中的第一个元素
           // arr[i].length:得到每个一维数组的长度
           //第三个一维数组的第四个值arr[2][3]
          for (int j=0;j< arr[i].length;j++){
              System.out.print(arr[i][j]+"\t");
          }
           System.out.println(" ");
       }
    }
}

二维数组的使用
使用方式1:动态初始化
1)语法:类型[][]数组名=new类型[大小][大小]比如: int a[][]=new int[2][3]
2)使用演示

public class Test {
    public static void main(String[] args) {
       int[][]arr=new int[2][3];
       for (int i=0;i< arr.length;i++){
           for (int j=0;j<arr[i].length;j++){
               System.out.print(arr[i][j]+" ");
           }
           System.out.println("");
       }
    }
}


3)二维数组在内存的存在形式

 

 使用方式2:动态初始化
1)先声明:类型数组名;再定义(开辟空间)数组名= new类型[大小][大小]
2)赋值(有默认值,比如int类型的就是0)
3)使用演示

public class Test {
    public static void main(String[] args) {
        //先声明  再新建
       int[][]arr;
       arr=new int[2][3];
       for (int i=0;i< arr.length;i++){
           for (int j=0;j<arr[i].length;j++){
               System.out.print(arr[i][j]+" ");
           }
           System.out.println("");
       }
    }
}

·使用方式3:动态初始化-列数不确定
1)看一个需求:动态创建下面二维数组,并输出。

public class Test {
    public static void main(String[] args) {
        //创建了一个二维数组,一共有三个一维数组 每一个数组的元素不一样
       int[][]arr=new int[3][];
       //遍历每一个数组
       for (int i=0;i< arr.length;i++){
           //给每一个数组开空间
           //如果没有给一维数组new 那么arr[i]就是null
           arr[i]=new int[i+1];
           //遍历一维数组并给一维数组的每一个元素赋值
           for (int j=0;j<arr[i].length;j++){
             arr[i][j]=i+1;
               System.out.print(arr[i][j]+" ");
           }
           System.out.println("");
       }
    }
}

静态创建输出

public class Test {
    public static void main(String[] args) {
       int[][]arr={{1},{2,2},{3,3,3}};
       for (int i=0;i< arr.length;i++){
           for (int j=0;j<arr[i].length;j++){
               System.out.print(arr[i][j]+" ");
           }
           System.out.println("");
       }
    }
}

案例:
int arr[][]={{4,6},{1,4,5,7,},{-2}};遍历该二维数组,并得到和

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

案例:打印一个十行的杨辉三角

public class Test {
    public static void main(String[] args) {
       int[][]yangHui= new int[10][];
       //遍历杨辉中的每个元素
       for (int i=0;i< yangHui.length;i++){
           //给每一个一维数组开空间
           yangHui[i]=new int[i+1];
           //给每一个一维数组赋值
           for (int j=0;j<yangHui[i].length;j++){
               //每一行的第一个和最后一个元素都是1
               if (j==0||j== yangHui[i].length-1){
                   yangHui[i][j]=1;
               }else {//中间的元素   上一行同一列+上一行上一列的元素
                   yangHui[i][j]= yangHui[i-1][j]+yangHui[i-1][j-1];
               }
           }
       }
       //输出杨辉三角
        for (int i=0;i<yangHui.length;i++){
            for (int j=0;j< yangHui[i].length;j++){
                System.out.print(yangHui[i][j]+" ");
            }
            System.out.println("");
        }
    }
}

案例.已知有一个升序的数组,要求插入一个元素之后还是升序,比如{10,12,45,90}插入25之后{10,12,25,45,90}

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
       int[]arr={10,12,45,90};
        System.out.println("请输入你要插入的数字:");
       int num= sc.nextInt();
       int index=arr.length;//要插入的位置
       for (int i=0;i<arr.length;i++){
           //如果num<arr[i],i就是要插入的位置
           if (num<arr[i]){
               index=i;
               break;
           }
        }
       //判断index的值,如果为-1说明没有执行if语句
            if (index==-1){
                index=arr.length;
            }
        System.out.println("需要插入的索引位置为:"+index);
            //创建一个新数组 长度+1
       int[]arr2=new int[arr.length+1];
       //j控制旧数组的索引  i控制新数组的索引
       for (int i=0,j=0;i<arr2.length;i++){
           if (i !=index){//说明可以把arr的元素拷贝arr2
               arr2[i]=arr[j];
               j++;
           }else {
               //i这个位置就是要插入的数
               arr2[i]=num;
           }
       }
       arr=arr2;
        System.out.println("插入后的arr数组");
       for (int j=0;j<arr.length;j++){
           System.out.print(arr[j]+"\t");
        }
    }
}

随机生成10个整数(1_100的范围)保存到数组,并倒序打印以及求平均值、求最大(小)值和最大(小)值的下标、并查找里面是否有8

import java.util.Random;
public class Test {
    public static void main(String[] args) {
        int sum=0;//数组元素之和
        int []arr=new int[10];
        Random r=new Random();
        System.out.println("遍历后的数组");
        for (int i=0;i< arr.length;i++) {
            arr[i]=r.nextInt(100);
            System.out.print(arr[i]+"\t");
        }
        System.out.println("");
        System.out.println("倒叙打印后的数组");
        for (int i=arr.length-1;i>=0;i--){
            System.out.print(arr[i]+"\t");
            sum+=arr[i];
        }
        System.out.println("");
        int max=arr[0];//数组最大值初始化
        int maxIndex=0;//数组最大值索引初始化
        int min=arr[0];//数组最小值初始化
        int minIndex=0;//数组最小值索引初始化
        int avg=sum/arr.length;
        System.out.println("数组的平均值为:"+avg);
        for (int i=0;i<arr.length;i++) {
            if (max<arr[i]){
                max=arr[i];
                maxIndex=i;
            }
            if (min>arr[i]){
                min=arr[i];
                minIndex=i;
            }
        }
        System.out.println("数组的最大值为:"+max+"对应的索引为:"+maxIndex);
        System.out.println("数组的最小值为:"+min+"对应的索引为:"+minIndex);
        int findNumber=8;
        int findNumberIndex=-1;
        for (int i=0;i< arr.length;i++){
            if (arr[i]==findNumber){
                findNumberIndex=i;
                System.out.println("该数组里有8"+"对应的索引为:"+findNumberIndex);
                break;
            }
        }
        if (findNumberIndex==-1)
            System.out.println("该数组里没有8");
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到