01-数组

作者: 北街九条狗 | 来源:发表于2019-05-24 09:07 被阅读0次

    复习要点

    1.数组

    1.1声明语法及特点

    提示:只能保存一种数据类型,长度固定

    提示:数组是引用数据类型,栈内存中保存的是指向堆区的地址,地址上保存着每个元素

    // 声明
    int []arr = new int[5]; // 默认5个0
    int arr[] = new int[5]; // 默认5个0
    String str[] = new String[5];// 5个null
    
    int arr[] = new int[]{1,2,3,4,5};// 直接指定元素
    int arr[] = {5,4,3,2,1};// 直接指定元素
    
    1.2如何访问数组元素
    // 数组的访问需要通过索引(下标)访问,长度为n的数组,下标范围为0-4
    int arr[] = {5,4,3,2,1};
    System.out.println(arr[0]); // 5
    System.out.println(arr[3]); // 2
    
    1.3遍历数组

    遍历:逐个访问每个元素

    // 例:在控制台打印数组中每个元素
    int arr[] = {5,4,3,2,1};
    // 1.推荐
    for(int num : arr){
        System.out.println(num);
    }
    // 2.原始
    for(int i = 0;i < arr.length;i++){
        System.out.println(arr[i]);    
    }
    
    1.4二维数组

    数组中存的还是数组

    // 假如房子是一个数组,里面装着家具,房子里面还有房子,每个房子里面有自己的家具,这就是二维数组
    int arr[][] = new int[5][]; // 保存了5个null
    int []arr[] = new int[5][]; // 保存了5个null
    int [][]arr = new int[5][]; // 保存了5个null
    
    int arr[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
    int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};
    
    1.5二维数组的访问
    int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};
    System.out.println(arr[0][0]);//1  
    System.out.println(arr[1][2]);//6  
    System.out.println(arr[2][1]);//8  
    
    1.6二维数组的遍历
    int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};
    for(int i = 0;i < arr.length;i++){
        for(int j = 0;j < arr[i].length;j++){
            System.out.println(arr[i][j]);
        }
    }
    

    注意:下标一旦越界,会抛出数组越界异常ArrayIndexOutOfBoundsException

    1.7排序(重点,至少掌握一种)
    public class Demo2 {
        public static void main(String[] args) {
            // 数组的排序
            int arr[] = {12,1,55,7,89,32};
            // 1.冒泡排序(必须)
            // 外层循环--一共比较多少轮
    //      for(int i = 1;i < arr.length;i++) {
    //          // 每一轮比较的次数与第几轮和数组长度有关
    //          for(int j = 0;j < arr.length - i;j++) {
    //              if(arr[j] > arr[j+1]) {
    //                  int temp;
    //                  temp = arr[j];
    //                  arr[j] = arr[j+1];
    //                  arr[j+1] = temp;
    //              }
    //          }
    //      }
    //      for(int num : arr) {
    //          System.out.print(num+" ");
    //      }
            
            // 2.选择排序(非必须)
            for(int i = 0;i < arr.length - 1;i++) {
                for(int j = i + 1;j < arr.length;j++) {
                    if(arr[i] > arr[j]) {
                        int temp;
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            for(int num : arr) {
                System.out.print(num+" ");
            }
        }
    }
    

    经典练习题

    数组的定义及遍历

    • 1.定义一个长度为5的int类型数组,分别赋值为7,8,2,3,5,并完成遍历在控制台打印

      int []arr=new int[5];
      arr[0]=7;
      arr[1]=8;
      arr[2]=2;
      arr[3]=3;
      arr[4]=5;
      for(int i=0;i<5;i++){
          system.out.println(arr[i]);
      }
      
    • 2.在控制台输入三个数组,分别代表年月日,计算这一天在这一年当中是第多少天

      int a[]= {31,28,31,30,31,30,31,31,30,31,30,31};//平年
            int b[]= {31,29,31,30,31,30,31,31,30,31,30,31};//闰年
            Scanner scan=new Scanner(System.in);
            System.out.println("请输入年份");
            int year=scan.nextInt();
            System.out.println("请输入月份");
            int month=scan.nextInt();
            System.out.println("请输入日期");
            int date=scan.nextInt();
            int num=0;
            if((year%4==0&&year%100!=0) ||(year%100==0 && year%400==0)){
                for(int i=0;i<month-1;i++) {
                     num=num+b[i];
                }
                System.out.println(year+"年"+month+"月"+date+"日是"+year+"年"+"的第"+(num+date)+"天");
            }else {
                for(int i=0;i<month-1;i++) {
                     num=num+a[i];
                }
                System.out.println(year+"年"+month+"月"+date+"日是"+year+"年"+"的第"+(num+date)+"天");
            }
      
    • 3.int arr[] = {5,4,3,2,1};找出该数组的最大值,最小值,平均值

    int arr[]= {5,4,3,2,1};
    int max=arr[0];
    int min=arr[0];
    int sum=0;
    for(int i=0;i<arr.length;i++) {
        if(max<arr[i]) {
            max=arr[i];
        }
        if(min>arr[i]) {
            min=arr[i];
        }
        sum=sum+arr[i];
    }
    System.out.println("平均值是"+(sum/arr.length));
    System.out.println("最大值是"+max);
    System.out.println("最小值是"+min);
    
    • 4.int arr[] = {53,14,73,20,-31};找出该数组的最大值及其下标

      int a=0;
      int b=0;
      for(int i=0;i<arr.length;i++){
          if(a<arr[i]){
              a=arr[i];
              b=i;
          }
      }
      System.out.println("最大值是"+a+","+"它的下标是"+b);
      
    • 5.逆序输出.int arr[] = {5,4,3,2,1};中元素

      for(int i=arr.length-1;i>=0;i--){
          System.out.println(arr[i]);
      }
      
    • 6.对int arr[] = {53,14,73,20,-31};整型数组降序排序

      //选择排序
      for(int i=0;i<arr.length-1;i++){
          for(int j=i+1;j<arr.length;j++){
              if(arr[i]<arr[j]){
                  int a=arr[i];
                  arr[i]=arr[j];
                  arr[j]=a;
              }
          }
      }
      //冒泡排序
      for(int i=1;i<arr.length;i++) {
                for(int j=0;j<arr.length-i;j++) {
                    if(arr[j]<arr[j+1]) {
                        int a=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=a;
                    }
                }
            }
      
    • 7.对int arr[] = {53,14,73,20,-31,14,0,22,56};重复的元素清0

      for(int i=0;i<arr.length;i++) {
        for(int j=i+1;j<arr.length;j++) {
            if(arr[i]==arr[j]) {
                arr[j]=0;
            }
        }
      }
      
    • 8.模拟35选7,生成随机7个1-35之间的数字(注意:7个数字不能重复)

      //第一种方法       
            boolean onOff=true;
            int arr[]=new int[7];
            for(int i=0;i<7;i++) {
      //            判断循环是否产生了重复的数
                onOff=true;
                int num=(int)Math.floor(Math.random()*34+1);
                
                for(int j=0;j<=i;j++) {
      //                判断循环是否产生了重复的数
                    if(arr[j]==num) {
                        onOff=false;
                        break;
                    }
                }
      //            如果产生重复数就要重新产生
                if(onOff) {
                    arr[i]=num;
                }else {
                    i--;
                }
            }
      //第二种方法
      int arr[]=new int[7];
      boolean b[]=new boolean[35];
      for(int i=0;i<arr.length;i++) {
        int num=(int)Math.floor(Math.random()*34+1);
        if(!b[num-1]) {
            arr[i]=num;
            b[num-1]=true;
        }else {
            i--;
        }
      }
      

    二维数组

    • ①掌握二维数组的遍历

    • ②求一个3x3矩阵对角线和

      int arr[][] = {
          {1,2,3},
          {4,5,6},
          {7,8,9}
      }
      
      int a=0;
      int b=0;
      for(int i=0;i<arr.length;i++) {
        a=a+arr[i][i];
        b=b+arr[i][arr[i].length-1-i];
      }
      System.out.println(a);
      System.out.println(b);
      

    相关文章

      网友评论

          本文标题:01-数组

          本文链接:https://www.haomeiwen.com/subject/iiywzqtx.html