01-数组

复习要点

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
  • 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;iarr[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
  • 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
  • 7.对int arr[] = {53,14,73,20,-31,14,0,22,56};重复的元素清0

    for(int i=0;i
  • 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

二维数组

  • ①掌握二维数组的遍历

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

    int arr[][] = {
        {1,2,3},
        {4,5,6},
        {7,8,9}
    }
    
    int a=0;
    int b=0;
    for(int i=0;i

你可能感兴趣的:(01-数组)