day06_数组

day06复习

1. 每天一考

		/*
		第1题:
		int m=0,n=3;
		if(m>0)
			if(n>2)
				System.out.println("A");
			
			System.out.println("C");		
			
			else
				System.out.println("B");
		*/


		/*
		3.一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.
		编程 找出1000以内的所有完数。(因子:除去这个数本身的其它约数)
		*/
		int sum = 0;//累加因子
		for(int i = 1;i <= 1000;i++){
			
			for(int j = 1;j <= i/2 ;j++){
				if(i % j == 0){
					sum += j;
				}
			}
			
			if(i == sum){
				System.out.println(i);
			}
			//重置
			sum = 0;

		}
		
		/*				i	j
		******			1	6
		*****			2	5
		****			3	4
		***				4	3
		**				5	2
		*				6	1

		
		*/

		for(int i = 1;i <= 6;i++){
			
			for(int j = 1;j <= 7 - i;j++){
				System.out.print('*');
			}
			System.out.println();
		}

2. IDEA的使用

  • 傻瓜式的安装

  • 启动 - 相关的设置(主题、插件等)-注册…

  • 指定路径下,创建一个Java工程,需要制定jdk路径。
    在这里插入图片描述

在这里插入图片描述

  • 界面启动以后,我们选中工程,可以new - module (模块)
    在这里插入图片描述

  • 在module下的src目录下,创建package
    在这里插入图片描述

  • 在package下new - class
    在这里插入图片描述

  • 大家下来需要参考课件,将第六章的设置从上到下操作一遍。

    尤其需要操作的是字符集的设置:
    在这里插入图片描述

  • 至于快捷键、代码模板后续讲解。

3. 数组的概述

一、数组的理解
* 数组,可以看做是多个相同数据类型的变量按照一定顺序排列的组合(或集合)
*
*
 二、变量的分类:基本数据类型(8种) vs  引用数据类型(类、接口、数组)
*   变量的声明格式:数据类型  变量名  = 变量值

三、数组相关的概念
 *  1. 数组名
 *  2. 数组元素
 *  3. 数组的索引(角标、下角标)
 *  4. 数组的长度:数组中元素的个数
 *
 四、说明
 * 1. 不管是静态初始化,还是动态初始化,只要数组初始化完成,其长度就是确定的。
 * 2. 数组一旦初始化完成,其长度就不可变。
 * 3. 数组属于引用数据类型;
 *    数组的元素既可以是基本数据类型,也可以是引用数据类型。比如:int[] \ boolean[] \ char[] \ double[] \ String[]
 *

4. 一维数组的使用

4.1数组的声明与定义

//数据类型  变量名  = 变量值
        double price1 = 34.32;
        double price2 = 23.32;

        //1. 定义数组
        //1.1 数组的声明
        double[] prices;
        //1.2 数组的初始化
        //静态初始化方式:数组变量的赋值与数组元素的赋值同时进行。
        prices = new double[]{34.32,23.32,12.35};
        int[] nums = new int[]{1,2,3,4,5};

        //动态初始化方式:数组变量的赋值与数组元素的赋值分开进行。
        String[] names = new String[5];

        //错误的定义方式
//        int[] ids1 = new int[3]{3,4,5};
//        int[3] ids2 = new int[]{3,4,5};
//        int[3] ids3 = new int[3];

        //也是正确的方式
        int[] arr1 = {1,2,3}; //类型推断
        int arr2[] = new int[]{1,2,3};

4.2 数组元素的调用

		//2. 数组元素的调用:使用角标的方式进行调用
        //数组元素的角标是从0开始的,到数组的长度-1结束。
        System.out.println(prices[0]);
        System.out.println(nums[3]);

        names[0] = "张奥";
        names[1] = "陈亚飞";
        names[4] = "肖华";
//        names[5] = "郑璇"; 运行报错

4.3 数组的属性:长度

//3. 数组的长度:length
System.out.println(names.length);//5
System.out.println(nums.length);//5

4.4数组的遍历

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

4.5 数组元素的默认值

测试数组元素的默认值
*        如果数组的元素是整型,则数组元素的默认值为:0
*        如果数组的元素是浮点类型,则数组元素的默认值为:0.0
*        如果数组的元素是boolean类型,则数组元素的默认值为:false
*        如果数组的元素是char类型,则数组元素的默认值为:0 或 \u0000
*
*        如果数组的元素是引用数据类型,则数组元素的默认值为:null
*
*
*   说明:数组元素的类型可以是基本数据类型,也可以是引用数据类型。
        int[] arr1 = new int[5];

        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
        System.out.println();
        //byte[] \ short[] \ long[]
        long[] arr2 = new long[3];
        System.out.println(arr2[0]);

        System.out.println();
        double[] arr3 = new double[10];
        System.out.println(arr3[0]);

        System.out.println();
        boolean[] arr4 = new boolean[10];
        System.out.println(arr4[0]);

        System.out.println();
        char[] arr5 = new char[5];
        for(int i = 0;i < arr5.length;i++){
            System.out.println("****" + arr5[i] + "####");
        }

        System.out.println(arr5[0] == ' ');//false
        System.out.println(arr5[0] == '0');//false
        System.out.println(arr5[0] == 0);//true

        System.out.println();
        String[] arr6 = new String[5];
        for(int i = 0;i < arr6.length;i++){
            System.out.println(arr6[i]);
        }

        System.out.println(arr6[0] == null);//true
        System.out.println(arr6[0] == "null");//false

4.6 数组的内存解析 (有难度)

  • 内存结构的主要部分,及存储的结构
    在这里插入图片描述

  • 内存解析举例
    在这里插入图片描述

  • 练习

public class ArrayTest1 {
    public static void main(String[] args) {
        int[] arr = new int[]{8, 2, 1, 0, 3};
        int[] index = new int[]{2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3};

        String tel = "";
        for (int i = 0; i < index.length; i++) {
            tel += arr[index[i]];
        }
        System.out.println("联系方式:" + tel);//18...
    }

}
  • 练习
package com.atguigu.exer;


import java.util.Scanner;

/**
 * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
 * 成绩>=最高分-10    等级为’A’
 * 成绩>=最高分-20    等级为’B’
 * 成绩>=最高分-30    等级为’C’
 * 其余               等级为’D’
 *
 * 提示:先读入学生人数,根据人数创建int数组,存放学生成绩。
 *
 * @author shkstart
 * @create 14:07
 */
public class ArrayTest2 {
    public static void main(String[] args) {
        //1. Scanner的实例化
        Scanner scann = new Scanner(System.in);
        //2. 根据提示,获取学生的人数
        System.out.print("请输入学生的人数:");
        int number = scann.nextInt();
        //3. 根据长度,创建指定类型的数组:int[]
        int[] scores = new int[number];
        //4. 遍历数组,给数组的每一个元素赋值:arr[i] = scanner.nextInt()
        System.out.println("请输入" + number + "个成绩:");
        int maxScore = 0;//记录最高分
        for(int i = 0;i < scores.length;i++){
            scores[i] = scann.nextInt();
            //5. 获取最高分
            if(maxScore < scores[i]){
                maxScore = scores[i];
            }
        }

        System.out.println("最高分为:" + maxScore);

        //6. 遍历数组,获取每个学生成绩,以及与最高分的差值,并得出等级。
        char grade;
        for(int i = 0;i < scores.length;i++){
            if(scores[i] >= maxScore - 10){
                grade = 'A';
            }else if(scores[i] >= maxScore - 20){
                grade = 'B';
            }else if(scores[i] >= maxScore - 30){
                grade = 'C';
            }else{
                grade = 'D';
            }
            System.out.println("student " + i + " score is " + scores[i] + " grade is " + grade);
        }

    }
}

5. 二维数组的使用

    数组属于引用数据类型;
*   数组的元素既可以是基本数据类型,也可以是引用数据类型。如果数组的元素还是数组的话,则构成了多维数组

5.1数组的声明与定义

		//理解
        String[] star1 = new String[]{"陈伟霆","13121341234"};
        String[] star2 = new String[]{"刘诗诗","13221341234"};
        //一维数组star1,star2又作为了另一个一维数组stars的元素,则构成二维数组
        String[][] stars = new String[][]{star1,star2};//二维数组

        //1. 数组的声明与定义
        int[][] arr1;
        arr1 = new int[][]{{1,2,3},{5,6,7},{7,8}};//静态初始化

        //动态初始化方式1
        int[][] arr2 = new int[4][3];
        //动态初始化方式2
        int[][] arr3 = new int[5][];

        //错误的写法
//        int[][] arr4 = new int[4][3]{{1,2,3},{5,6,7},{7,8}};
//        int[][] arr5 = new int[][3];

        //正确的其他写法
        int arr6[][] = new int[4][3];
        int[] arr7[] = new int[4][];
        int[][] arr8 = {{1,2,3},{5,6,7},{7,8}};//类型推断

5.2 数组元素的调用

		//2. 数组元素的调用
        // 通过角标的方式进行调用
        System.out.println(arr1[0][0]);
        System.out.println(arr1[2][0]);

        arr6[1][2] = 12;

5.3 数组的属性:长度

		//3. 数组的属性:长度
        System.out.println(arr1.length);//3
        System.out.println(arr1[2].length);//2

5.4数组的遍历

		for(int i = 0;i < arr1.length;i++){
            for(int j = 0;j < arr1[i].length;j++){

                System.out.print(arr1[i][j] +"\t");
            }
            System.out.println();
        }

5.5 数组元素的默认值

 * 测试二维数组元素的默认值
 *    约定:arr1的元素称为外层元素,arr1[0]的元素称为内层元素
 *
 *   针对格式1:int[][] arr1 = new int[4][3];
 *      外层元素的值为:数组的类型和对应的指向一维数组的地址
 *      内层元素的值为:与一维数组的默认值相同
 *          如果数组的元素是整型,则数组元素的默认值为:0
 *          如果数组的元素是浮点类型,则数组元素的默认值为:0.0
 *          如果数组的元素是boolean类型,则数组元素的默认值为:false
 *          如果数组的元素是char类型,则数组元素的默认值为:0 或 \u0000
 *          如果数组的元素是引用数据类型,则数组元素的默认值为:null
 *
 *   针对格式2:int[][] arr2 = new int[4][];
 *       外层元素的值为:null
 *       内层元素的值为:报空指针异常的错误。
public static void main(String[] args) {
        int[][] arr1 = new int[4][3];
        System.out.println(arr1[0]);//[I@1540e19d
        System.out.println(arr1[1]);//[I@677327b6
        System.out.println(arr1[2]);//[I@14ae5a5
        System.out.println(arr1[3]);//[I@7f31245a

        double[][] arr2 = new double[3][2];
        System.out.println(arr2[0]);//[D@6d6f6e28

        String[][] arr3 = new String[3][4];
        System.out.println(arr3[0]);//[Ljava.lang.String;@135fbaa4

        System.out.println(arr1[0][0]);//0
        System.out.println(arr2[0][0]);//0.0
        System.out.println(arr3[0][0]);//null

        System.out.println("############针对格式2##############");
        int[][] arr4 = new int[4][];
        System.out.println(arr4[0]);//null
        System.out.println(arr4[1]);//null
        System.out.println(arr4[2]);//null
        System.out.println(arr4[3]);//null

        double[][] arr5 = new double[3][];
        System.out.println(arr5[0]);//null

        //System.out.println(arr4[0][0]);//报错

        //最后一行代码报错,但是在开发中,我们确实有可能要遍历或操作二维数组的内层元素。
        //当报错的话,表明没有给外层元素进行赋值。则赋值之后即可。
        arr4[0] = new int[4];
        arr4[1] = new int[]{1,2,4};
        System.out.println(arr4[0][0]);//0
    }

5.6 数组的内存解析 (有难度)

在这里插入图片描述

  • 练习
package com.atguigu.exer;

/**
 * 二维数组的课后练习
 * @author shkstart
 * @create 16:23
 */
public class ArrayTest3 {
    public static void main(String[] args) {
        int[][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}};
        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);
    }
}

6. 课后练习

  • 题目一
    在这里插入图片描述

  • 题目二
    在这里插入图片描述

  • 题目三:常见的算法:针对于数值类型的数组(比如int[]),获取数组的最大值、最小值、总和、平均数

  • 思考题:数组的反转、排序、复制

关于Arrays工具类的使用;

两种异常:ArrayIndexOutOfBoundsException \ NullPointerException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值