学习java之day06

1.数组的概述

1.数组的理解:数组(Array),是多个相同类型数据按一定的顺序排列的集合,并使用一个名字命名, 并通过编号的方式对这些数据进行管理。

2.数组相关的概念: ①数组名 ②元素 ③下标 (角标、索引) ④数组的长度:数组的个数

3.数组的特点: 1)数组是有序排列的 2)数组是属于引用数据类型的变量。数组的元素,可以是基本数据类型,也可以是引用数据类型 3)创建数组会在内存中开辟一整块连续的空间 4)数组长度一旦确定,就不能修改。

4.数组的分类: ①按照维数分:一维数组、二维数组、...... ②按照数组的元素类型分:引用数据类型的数组、基本数据类型的数组

5.一维数组的使用: ①一维数组的声明与初始化 ②如何调用数组的指定位置的元素 ③如何获取数组的长度 ④如何遍历数组 ⑤数组的默认初始化值 :见ArrayTest1.java ⑥数组的内存解析:见ArrayTest1.java

public class ArrayTest {
   public static void main(String[] args) {

       // 1. 一维数组的声明和初始化
       int num;// 声明
       num = 10;// 初始化
       int id = 1001;// 声明 + 初始化

       int[] ids;// 声明
       // 1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
       ids = new int[] { 1001, 1002, 1003, 1004 };
       // 1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
       String[] names = new String[5];
       System.out.println(names[2]);// 默认值null

       // 错误的写法:
//     int[] arr1 = new int[];
//     int[5] arr2 = new int[5];
//     int[] arr3 = new int[3]{1,2,3};

       // 也是正确的写法:
       int[] arr4 = { 1, 2, 3, 4, 5 };// 类型推断

       // 总结:数组一旦初始化完成,其长度就确定了。

       // 2.如何调用数组的指定位置的元素:通过角标的方式调用。
       // 数组的角标(或索引)从0开始的,到数组的长度-1结束。
       names[0] = "王铭";
       names[1] = "王赫";
       names[2] = "张学良";
       names[3] = "孙居龙";
       names[4] = "王宏志";// charAt(0)
//     names[5] = "周扬";

       // 3.如何获取数组的长度。
       // 属性:length
       System.out.println(names.length);// 5
       System.out.println(ids.length);

       // 4.如何遍历数组
       /*
        * System.out.println(names[0]); System.out.println(names[1]);
        * System.out.println(names[2]); System.out.println(names[3]);
        * System.out.println(names[4]);
        */

       for (int i = 0; i < names.length; i++) {
           System.out.println(names[i]);
      }

  }
}

/*
* ⑤ 数组元素的默认初始化值
*     > 数组元素是整型:0
*     > 数组元素是浮点型:0.0
*     > 数组元素是char型:0或'\u0000',而非'0'
*     > 数组元素是boolean型:false
*
*     > 数组元素是引用数据类型:null
*  
* ⑥ 数组的内存解析
*/
public class ArrayTest1 {
   public static void main(String[] args) {
       //5.数组元素的默认初始化值
       int[] arr = new int[4];
       for(int i = 0;i < arr.length;i++){
           System.out.println(arr[i]);
      }
       System.out.println("**********");
       
       short[] arr1 = new short[4];
       for(int i = 0;i < arr1.length;i++){
           System.out.println(arr1[i]);
      }
       System.out.println("**********");
       float[] arr2 = new float[5];
       for(int i = 0;i < arr2.length;i++){
           System.out.println(arr2[i]);
      }
       
       System.out.println("**********");
       char[] arr3 = new char[4];
       for(int i = 0;i < arr3.length;i++){
           System.out.println("----" + arr3[i] + "****");
      }
       
       if(arr3[0] == 0){
           System.out.println("你好!");
      }
       
       System.out.println("**********");
       boolean[] arr4 = new boolean[5];
       System.out.println(arr4[0]);
       
       System.out.println("**********");
       String[] arr5 = new String[5];
       System.out.println(arr5[0]);
       if(arr5[0] == null){
           System.out.println("北京天气不错!");
      }
  }
}

2.维数组的使用

1.理解:

  • 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。

  • 其实,从数组底层的运行机制来看,其实没有多维数组。

    1. 二维数组的使用:

  • ① 二维数组的声明和初始化

  • ② 如何调用数组的指定位置的元素

  • ③ 如何获取数组的长度

  • ④ 如何遍历数组

  • ⑤ 数组元素的默认初始化值 :见 ArrayTest3.java

  • ⑥ 数组的内存解析 :见 ArrayTest3.java


ublic class ArrayTest2 {
   public static void main(String[] args) {
       // 1.二维数组的声明和初始化
       int[] arr = new int[] { 1, 2, 3 };// 一维数组
       // 静态初始化
       int[][] arr1 = new int[][] { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } };
       // 动态初始化1
       String[][] arr2 = new String[3][2];
       // 动态初始化2
       String[][] arr3 = new String[3][];
       // 错误的情况
//     String[][] arr4 = new String[][4];
//     String[4][3] arr5 = new String[][];
//     int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};

       // 也是正确的写法:
       int[] arr4[] = new int[][] { { 1, 2, 3 }, { 4, 5, 9, 10 }, { 6, 7, 8 } };
       int[] arr5[] = { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } };

       // 2.如何调用数组的指定位置的元素
       System.out.println(arr1[0][1]);// 2
       System.out.println(arr2[1][1]);// null

       arr3[1] = new String[4];
       System.out.println(arr3[1][0]);

       // 3.获取数组的长度
       System.out.println(arr4.length);// 3
       System.out.println(arr4[0].length);// 3
       System.out.println(arr4[1].length);// 4

       // 4.如何遍历二维数组
       for (int i = 0; i < arr4.length; i++) {

           for (int j = 0; j < arr4[i].length; j++) {
               System.out.print(arr4[i][j] + " ");
          }
           System.out.println();
      }

  }
}

/*
* 二维数组的使用:
* 规定:二维数组分为外层数组的元素,内层数组的元素
*     int[][] arr = new int[4][3];
*     外层元素:arr[0],arr[1]等
*     内层元素:arr[0][0],arr[1][2]等
*
*   ⑤ 数组元素的默认初始化值
*   针对于初始化方式一:比如:int[][] arr = new int[4][3];
*     外层元素的初始化值为:地址值
*     内层元素的初始化值为:与一维数组初始化情况相同
*      
*   针对于初始化方式二:比如:int[][] arr = new int[4][];
*     外层元素的初始化值为:null
*     内层元素的初始化值为:不能调用,否则报错。
*  
*   ⑥ 数组的内存解析
*
*/
public class ArrayTest3 {
   public static void main(String[] args) {

       int[][] arr = new int[4][3];
       System.out.println(arr[0]);// [I@15db9742
       System.out.println(arr[0][0]);// 0

//     System.out.println(arr);//[[I@6d06d69c

       System.out.println("*****************");
       float[][] arr1 = new float[4][3];
       System.out.println(arr1[0]);// 地址值
       System.out.println(arr1[0][0]);// 0.0

       System.out.println("*****************");

       String[][] arr2 = new String[4][2];
       System.out.println(arr2[1]);// 地址值
       System.out.println(arr2[1][1]);// null

       System.out.println("*****************");
       double[][] arr3 = new double[4][];
       System.out.println(arr3[1]);// null
//     System.out.println(arr3[1][0]);//报错

  }
}

3.练习

/*
* 2. 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
       成绩>=最高分-10   等级为’A’  
       成绩>=最高分-20   等级为’B’
       成绩>=最高分-30   等级为’C’  
       其余                               等级为’D’
       
       提示:先读入学生人数,根据人数创建int数组,存放学生成绩。

*
*/
public class ArrayDemo1 {
   public static void main(String[] args) {
       System.out.println("请输入学生的人数:");
       Scanner scanner = new Scanner(System.in);
       int number = scanner.nextInt();
       System.out.println("请输入" + number + "个学生的成绩");

       int[] scores = new int[number];// 存放学生的成绩
       for (int i = 0; i <= scores.length - 1; i++) {
           scores[i] = scanner.nextInt();
      }

       // 找出谁的成绩最大
       int max = 0;// 存放最大的值
       for (int i = 0; i <= scores.length - 1; i++) {
           if (max <= scores[i]) {
               max = scores[i];
          }
      }

       System.out.println("最大成绩为:" + max);
       // 遍历学习的所有成绩,找出符合要求的等级
       for (int i = 0; i <= scores.length - 1; i++) {
           if (scores[i] >= max - 10) {
               System.out.println("成绩为"+ scores[i]+"的等级为A");
          } else if (scores[i] >= max - 20) {
               System.out.println("成绩为"+ scores[i]+"的等级为B");
          } else if (scores[i] >= max - 30) {
               System.out.println("成绩为"+ scores[i]+"的等级为C");
          }else {
               System.out.println("成绩为"+ scores[i]+"的等级为D");
          }
      }
  }
}



posted @ 2021-12-20 00:35  天覆者  阅读(177)  评论(0)    收藏  举报