0
点赞
收藏
分享

微信扫一扫

JAVA基础day04

gy2006_sw 2022-03-11 阅读 49

day04

学习目标

  • 了解数组的定义
  • 掌握数组的动态初始化
  • 掌握数组的静态初始化
  • 掌握数组的遍历
  • 掌握数组求最值
  • 掌握数组的排序 冒泡排序
  • 了解数组的内存图
    • 了解java的内存分配
    • 了解一个数组内存图
    • 了解多个数组指向各自空间的内存图
    • 了解多个数组指向同一内存的内存图

1.数组的定义

数组就是用来存储相同数据类型数据的容器

1.1数组定义的格式
/*
           数组定义格式
           数据类型【】变量名;
           interesting【】arr定义了一个数组,只能存放int类型相匹配的数据
           数据类型  变量名【】;
           double brr[];//定义了一个double类型的数组,可以存放和double相匹配的数据
           */
           public class Demo01数组定义格式{
           }
1.2数组的动态初始化
       /*
       数组的动态初始化:
               数据类型【】数组名=new 数据类型【长度】;
               */
       public  class Demo02数组的动态初始化{
               public static void main(String[] agrs){
                     //定义一个长度为3的int类型的数据
                     int 【】arr=new int 【3】;
                     //定义了一个长度为5的float类型的数组
                               float 【】 brr=new float[5];     
          }
1.3动态数组的基本操作 取值 赋值
   动态初始化数组的基本操作 
    取值:
     格式:数组的数据类型 变量名=数组名【索引】;
     索引:师叔祖在内存中开辟空间编号,从0开始到数组长度减一 例如 数组的长度为5 数组最大索引是4
      赋值:
            格式:arr[索引]=值;
            */
            publilc class Demo03动态初始化数组的基本操作{
            public static void main(String[] agrs){
            //动态初始化一个长度为5的int类型的数组
            int []arr =new int [5];//数组的长度为5 只能存放int类型相匹配数据,他的索引是 0 1 2 3 4
            //取值:格式:数组的数据类型 变量名=数组名【索引】;
            int a=arr[0];//取出0索引对应的数值 存放到变量a中
            //打印a
            System.out.println(a);
            int b=arr[1];
             System.out.println(b);
            int c=arr[2];
              System.out.println(c);
            int d=arr3];
            System.out.println(d);
            int e=arr[4];
            System.out.println(e);
            System.out.println("-----------------------------");
            for(int i=0;i<5;i++){
            /*System.out.println(i);*/
            int f= arr[i];
            System.out.println(f);
            }
            System.out.println("------------------------------");
            //赋值:格式:arr[索引]=值;
            arr[0]=10;
            arr[1]=20;
            arr[2]=30;
            arr[3]=40;
            arr[4]=50;
            for(int i= 0;i<5;i++){
            int x=arr[i];
            System.out.println(x);
                }
            }
            }
1.4数组的静态初始化
/* 
         数组的静态初始化:
           格式1:
              数据类型【】数组名=new 数据类型【】{.............}
              int [] arr=new int[]{1,2,3,4,5,6,7,8,9,0}
            格式2:
              数据类型【】数组名={.................};
              int []brr={1,2,3,4,5,6,7,8,9};
              提示:
                  静态初始化数组推荐使用格式2,放存储单元是已知数据是推荐使用数组的静态初始化
                  静态初始化数组有默认值,默认值是初始化是赋给的值*/
            public class Demo04数组的静态初始化{
            public static void main(String[] agrs){
                 int []brr={1,2,3,4,5,6,7,8,9};
                 int a=brr[0];
                 System.out.println(a);
                   System.out.println("--------------------------");
                       for(int i=0;i<9;i+++){
                       System.out.println(brr[i]);
                       }
                        System.out.println("--------------------------");
                        int []crr={1,2,3,4,5,6,7,8,9,0};
                        /*
                              求数组的长度 数组提供了了一个属性length用来求数组的长度
                              使用格式:
                              int l=数组名.length;
                              */
                              int l=crr.length;
                               System.out.println(l);
                               int length =brr.length;
                                 System.out.println(length);
                                 //去除数组中所有元素 打印到控制台
                                 forint i=0;i<crr.length;i++{
                                   System.out.println(crr[i]);
                                 }
        }
}
1.5动态初始化数组有默认值
/*
         动态初始化数组有默认值:
         基本类型的数组有默认值:
            byte short int long数组 默认值是0
            float double 数组 默认值是0.0
            boolean 数组 默认值是false
            char 数组 默认值'\u0000'
            引用数据类型数组的默认值是:null
            */
   public  class Demo05动态初始化数组有默认值{
         public static void main( String[] agrs){
         //int 数组 默认值是0
         int[]arr= new int[3];
         for(int i=0;i<arr.length;i++){
         System.out.println(arr[i]);
              }
              System.out.println("---------------------------")
              //byte 数组 默认值是0
              byte []brr=new byte[3];
              for(int i=0;i<brr.length;i++){
              System.out.println(brr[i]);
              }
              System.out.println("----------------------");
              short[] crr=new short[3];
              for(int i=0;i<crr.length;i++){
              System.out.println(crr[i]);
              }
                System.out.println("----------------------");
                   long[] drr=new long[3];
              for(int i=0;i<drr.length;i++){
              System.out.println(drr[i]);
                  }
                System.out.println("----------------------");
                   float[] err=new float[3];
              for(int i=0;i<err.length;i++){
              System.out.println(err[i]);
                  }
                System.out.println("----------------------");
                 double[] frr=new double[3];
              for(int i=0;i<frr.length;i++){
              System.out.println(frr[i]);
                  }
                System.out.println("----------------------");
                   boolean [ ] grr=new boolean[3];
              for(int i=0;i<grr.length;i++){
              System.out.println(grr[i]);
                   }
                System.out.println("----------------------");
                  char [ ] hrr=new char[3];
              for(int i=0;i<hrr.length;i++){
              System.out.println(hrr[i]);
              }
                 System.out.println("----------------------");
                 //数组 类 接口
                 String [ ] irr=new String[3];
                 for(int i=0;i<irr.length;i++){
                  System.out.println(irr[i]);
                 }
         }
   }
1.6遍历数组
 /*
        遍历数组的通用代码:
           for ( int i=0;i<数组名.length;i++){
             System.out.println(数组名【i】);
           }
           */
           public class Demo06练习{
           public static void main(String [ ] agrs){
           int [ ] arr={11,22,33,44,55};
           //使用循环最方便 选择for循环
           for (int i=0;i<arr.length;i++){
           System.out.println(arr[i]);
           }
           }
           }
1.7求数组的最大值
/*
    1.定义最大值
          int max=arr[0];
          2.使用循环遍历数组依次获取数组中的每一个元素
          3.和最大值max比较
                 如果比最大值还要大。就更新最大值
                 */
public class Demo07求数组的最大值{
   public static void main (String[ ] agrs){
         int [ ] arr={5,44,33,55,22};
         //定义最大值
         int max =arr[0];
         //使用循环遍历数组
         forint i=0;i<arr.lebgth;i++{
         //和最大值比较
         if(arr[i]>max){
         //更新最大值
         max=arr[i];
         }
         }
         System.out.println("数组中元素的最大值是:"+max);
   }
}
1.8求数组的最小值
        /*
             1.定义最小值
              int min=arr[0];
              2.使用循环遍历获取数组中的每一个元素 依次和最小值比较 如果比最小值还要小,就更新最小值
              */
public class Demo08求数组的最小值{
     public static void main (String [ ] agrs ){
     int [ ] arr={5,44,33,55,22};
     //1.定义最小值
     int min =arr[0];
     //2.使用for循环遍历数组
     for(int i=0;i<arr.length;i++){
     //3.比较
     if(arr[i]<min){
     //4.更新最小值
    min=arr[i];
     }
     }
     //5.打印结果
     System.out.println("数组中元素的最小值是:"+min);
     }
}
1.9求数组元素和求平均值

             /*
        求和:
        1.定义求和变量 存储最终和
        int sum = 0;
        2.使用循环遍历数组,获取数组中的元素,和求和变量累加
        3.打印最终和
     求平均值:
        使用数组中元素和和长度相除
 */
 public class Demo09求数组元素和求平均值{
     public static void main(String[] args) {
        int[] arr = {5, 44, 33, 55, 22};
        //1.定义求和变量 存储最终和
        int sum = 0;
        //2.使用循环遍历数组,获取数组中的元素,和求和变量累加
        for (int i = 0; i < arr.length; i++) {
            sum+=arr[i];
        }
        //3.打印最终和
        System.out.println("数组中所有元素的和:"+sum);

        //4.求平均值
        double avg = sum*1.0/arr.length;
        System.out.println("数组中元素的平局值:"+avg);
    }
1.10冒泡排序 最初版
import  java.untl.Arrays;
/*
         冒泡排序的原理:
         1.数组中相邻两个数字比较 如果前面的数据大于后面的数据则交换位置
         2.第一轮比较完成后 获取到数组中最大值放到最大值索引位置
         3.数组有多长我们就遍历多少轮
         */
         public class Demo10冒泡排序{
         public static void main(String[] agrs){
               int []arr={5,4,3,2,1};
               /*第一轮交换 求出数组中最大值放到最大牵引位置
               for(int i=0;i<arr.length;i++){
                       int temp=arr[i];
                       arr[i]=arr[i+1];
                       arr[i+1]=temp;
               }
         }
         System.out.prinlin(Arrays.toString(arr));
         //第二轮交换 求出数组中最大值放到最大索引位置
         for (int i=0;i<arr.length-1;i++){
                if(arr[i]>arr[i+1]){
                             int temp=arr[i];
                             arr[i]=arr[i+1];
                             arr[i+1]=temp;
                }
         }
          System.out.println(Arrays.toString(arr));
        //第三轮交换 求出数组中最大值放到最大索引位置
        for (int i=0;i<arr.length-1;i++){
              if(arr[i]>arr[i+1]){
              int temp=arr[i];
              arr[i]=arr[i+1];
              arr[i+1]=temp;
              }
        }
         System.out.println(Arrays.toString(arr));
        //第四轮交换 求出数组中最大值放到最大索引位置
        for(int i=0;i<arr.length;i++){
        if(arr[i]>arr[i+1]){
       int temp=arr[i];
       arr[i]=arr[i+1];
       arr[i+1]=temp;
        }
        }
        System.out.println(Arrays.toString(arr));*/
        for (int i=0;i<arr.length;i++){
        for(int j=0;j<i;j++){
        if(arr[j]>arr[j+1]){
        int temp=arr[i];
        arr[i]=arr[i+1];
        arr[j+1]=temp;
        }
       }
    }
  //打印数组的元素
        System.out.println(Arrays.toString(arr));
    }
}
1.11数组查找
import java.util.Scanner;
/*
 需求:一直一个数组arr={19,28,37,46,50};
 键盘录入一个数据,查找该数据在数组中的索引,在控制台输出找到的索引值。
 1.键盘录入
 2.查找键盘录入的数据在数组中的索引
 3.输出索引
  */
  public class Demo11数组查找{
  public static void main(String[] agrs){
    int []arr={19,28,37,46,50};
    //1.键盘录入
    Scanner scanner=new Scanner(System.in);
    System.out.println("请输入一个整数:")int num=scanner.nextInt();
     //2.查找键盘录入的数据在数组中的索引 如果不存输出-1
        //定义一个变量用来存存数组的索引
        int index=-1;
        for (int i=0;i<arr.length;i++){
        if(num==arr[i]){
        index=i;
        }
        }
         System.out.println(num+"在数组中索引"+index);
   }
  }
1.12评委打分
import java.util.Arrays;
import java.util.Scanner;

/*
  需求:在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
        选手的最后得分为:去掉一个最高分和一个最低分后的4个评委平均值 (不考虑小数部分)。
  1.定义长度为6的数组 存放6个评委的打分
  2.键盘录入6个成绩
  3.求最大值最小值
  4.求和 求平均值
*/
public class Demo12评委打分 {
  public static void main(String[] args) {
      //定义数组
      int [] arr = new int[6];
      //键盘录入6个成绩
      Scanner scanner = new Scanner(System.in);
      for (int i = 0; i < arr.length; i++) {
          System.out.println("请第"+(i+1)+"个评委打分:");
          int score = scanner.nextInt();
          if (score>=0&&score<=100){
              arr[i] = score;
          }else {
              System.out.println("您的打分不和法!");
              i--;
          }
      }
      System.out.println(Arrays.toString(arr));
      // 3.求最大值最小值
      int max = arr[0];
      for (int i = 0; i < arr.length; i++) {
          if (arr[i]>max){
              max = arr[i];
          }
      }
      System.out.println("max = "+max);
      int min = arr[0];
      for (int i = 0; i < arr.length; i++) {
          if (arr[i]<min){
              min = arr[i];
          }
      }
      System.out.println("min = "+min);
      //4.求和 求平均值
      int sum = 0;
      for (int i = 0; i < arr.length; i++) {
          sum+=arr[i];
      }
      System.out.println("sum = "+sum);
      //平均值
      double avg = (sum-max-min)*1.0/(arr.length-2);
      //double l = Math.round(avg * 100)*1.0 / 100;
      System.out.println("运动员的最终成绩:"+avg+"分");
  }
}

2.数组的内存分配

2.1Java内存分配 以及单个数组的内存图
/*
    栈内存
        方法运行时,进入的内存
    堆内存
        new出来的内容都会进入堆内存,并且会存在地址值
    方法区
        字节码文件(.class文件)加载时进入的内存
    本地方法栈:
        调用操作系统相关资源
    寄存器
        交给CPU去使用
 */
public class Demo01Java内存分配 {
    public static void main(String[] args) {
        int [] arr = new int[3];
        System.out.println(arr);//[I@119d7047
        /*
            [I@119d7047
            [:数组
            I:int类型
            @:分隔符
            119d7047:地址值 存在堆内存中
         */
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        arr[0] = 10;
        arr[1] = 20;
        arr[2] = 30;
        System.out.println(arr);//[I@119d7047
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);



        double [] brr = new double[3];
        System.out.println(brr);

        System.out.println(brr[0]);
        System.out.println(brr[1]);
        System.out.println(brr[2]);
        double [][] crr = new double[3][4];
        System.out.println(crr);

    }
}
2.2两个数组的内存图
/*
    两个数组指向各自对内存,无论谁修改自己堆内存中的数据,最后取值的时候,取得是修改后的最新值
 */
public class Demo02两个数组的内存图 {
    public static void main(String[] args) {
        int [] arr = new int[3];
        System.out.println(arr);//[I@119d7047
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        arr[0] = 10;
        arr[1] = 20;
        arr[2] = 30;
        System.out.println(arr);//[I@119d7047
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        int [] brr = new int[3];
        System.out.println(brr);
        System.out.println(brr[0]);//0
        System.out.println(brr[1]);
        System.out.println(brr[2]);
        brr[0] = 11;
        brr[1] = 22;
        brr[2] = 33;
        System.out.println(brr);
        System.out.println(brr[0]);//11
        System.out.println(brr[1]);//22
        System.out.println(brr[2]);//33
    }
}
2.3多个数组指向同一片区内存
/*
多个数组指向同一片堆内存,无论谁修改堆内存中的值,再去取值的时候取得是修改后的最新值
 */
 public class Demo03两个数组指向同一片堆内存 {
    public static void main(String[] args) {
    int []arr=new int[3];
     System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        arr[0]=10;
        arr[1]=20;
        arr[2]=30;
         System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        
         int []brr=arr;
     System.out.println(brr);
        System.out.println(brr[0]);
        System.out.println(brr[1]);
        System.out.println(brr[2]);
        brr[0]=11;
        brr[1]=22;
        brr[2]=33;
         System.out.println(brr[0]);
        System.out.println(brr[1]);
        System.out.println(brr[2]);
        }
  }
2.4数组在操作中出现问题
public class Demo04数组在操作中出现问题 {
  public static void main(String[] args) {
  //1.访问了数组不存在索引
  .ArrayIndexOutofBoundsException 数组索引越界异常
        int [] arr = new int[3];
      //System.out.println(arr[3]);//.ArrayIndexOutOfBoundsException
      //2.空指针异常 NullPointerException
      System.out.println(arr);
      arr = null;
      System.out.println(arr[0]);
  }
}
举报

相关推荐

day04

Day04

day04作业

day04 【Map】

打卡day04

Javase day04

0 条评论