Java复习笔记-05

文章介绍了Java编程中如何通过Scanner获取用户输入并判断数能否被3、5、7整除,以及计算日期与1900年1月1日相隔的天数。还详细讲解了数组的概念、定义、初始化方法和常见问题,包括动态和静态初始化,以及数组长度获取和遍历。
摘要由CSDN通过智能技术生成

习题

  • 输⼊⼀个数,判断它是否能被3、5、7整除,注意考虑同时整除的情况
		Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数字");
        int num = scanner.nextInt();
        boolean flag1 = (num % 3 == 0);//能够被3整除
        boolean flag2 = (num % 5 == 0);//能够被5整除
        boolean flag3 = (num % 7 == 0);//能够被7整除
        if (flag1 && flag2 && flag3){
            System.out.println("能够被3,5,7整除");
        }else if (flag1 && flag2){
            System.out.println("能够被3,5整除");
        }else if (flag1 && flag3){
            System.out.println("能够被3,7整除");
        }else if (flag2 && flag3){
            System.out.println("能够被5,7整除");
        }else if (flag1){
            System.out.println("能够被3整除");
        }else if (flag2){
            System.out.println("能够被5整除");
        }else if (flag3){
            System.out.println("能够被7整除");
        }else {
            System.out.println("不能被3,5,7整除");
        }
  • 计算⽤户输⼊的⽇期离1900年1⽉1⽇相距多少天
        // 1900 6 1  31 + 28 + 31 +30 + 31
        Scanner scanner = new Scanner(System.in);
        // 年  
        int year = scanner.nextInt();
        // 月
        int month = scanner.nextInt();
        // 日
        int day = scanner.nextInt();

        // 1901 1 3
        // totalDay代表的是总天数
        // 计算 天
        int totalDay = day - 1;

        // 计算 年  循环的添加每一年的天数
        for (int y = 1900;y < year;y++){
            // 判断是否是闰年
            // 闰年  能被4整除并且不能被100整除
            // 闰年  能够被400整除
            if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
                totalDay += 366;
            }else {
                totalDay += 365;
            }
        }

        // 计算月  循环的添加每个月的天数
        for (int m = 1; m < month;m++){
            switch (m){
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                    totalDay += 31;
                    break;
                case 2:
                    // 闰年
                    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
                        totalDay += 29;
                        break;
                    }
                    totalDay += 28;
                    break;
                default:
                    totalDay += 30;
                    break;
            }
        }
        System.out.println("距离1900年1月1日的天数是" + totalDay + "天");

1 数组

1.1 概述

  • 可以存放多个相同数据类型变量的容器。
  • 在数组中的变量,称之为数组的元素
  • 数组可以存储基本数据类型,也可以存储引用数据类型

1.2 定义格式

  • 数组的定义格式
    • 格式1:数据类型[ ] 数组名;(推荐)
    • 格式2:数据类型 数组名[ ];

1.3 数组的初始化

  • 概述
    • Java中的数组必须先初始化,才可以使用。
    • 所谓的初始化:就是为数组中的数组元素分配内存空间,并且为每个数组元素赋值。
  • 数组的初始化方式:
    • 动态初始化:初始化时只指定数组的长度,由系统为数组分配初始化值。
    • 静态初始化:初始化时指定每个数组元素的初始化值,由系统决定数组长度。

1.4 动态初始化

  • 初始化时只指定数组长度,由系统为数组分配初始化值。
  • 格式:数据类型[] 数组名 = new 数据类型[数组长度];
    • 数组长度其实就是数组中元素的个数

1.5 访问数组元素

  • 直接在控制台输出数组名,结果是数组堆内存中的地址。
  • 在数组中每个元素都是有编号的,这个编号从0开始。最大的编号是数组的长度 - 1
  • 这个编号有一个专业的叫法:索引 也称之为下标
  • 使用数组名和索引配置,我们就可以轻松获取数组中指定索引的元素
  • 格式: 数组名[索引];

1.6 java中的内存分配

Java程序在运行时,需要在内存中分配空间。

为了提高运算效率,java中对于空间进行了不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式。

  • 用来存放局部变量的
    • 局部变量是定义在方法中或者语句的变量
    • 大白话解释:凡是定义在方法的大括号的变量都是局部变量.比如:main方法 if语句 循环语句
    • 存放在栈中
    • 局部变量使用完毕,会立即回收
    • 本质上栈内存是用于计算的
  • 存储的都是对象
    • 凡是new出来的东西,都在堆内存中。
    • 对象存储在堆内存中,具有一个首地址值。
    • 其中不同的数据类型,都将被赋予一个初始化的默认值。
    • byte/short/int的默认值是0
    • long默认值是0L
    • float默认值是0.0F
    • double默认值是0.0
    • char类型默认值是\u0000,表示空格
    • boolean类型是false
    • 引用数据类型默认值都是null
  • 方法区 存储和.class相关的信息
  • 本地方法区 与操作系统相关
  • 寄存器 与CPU相关,性能非常高

1.7 数组内存图解

  • 定义两个数组。先定义一个数组赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组,然后给第二个数组赋值,再次输出两个数组的名和元素。
//        定义两个数组。
//        先定义一个数组赋值,输出。
//        然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组,
//        然后给第二个数组赋值,再次输出两个数组的名和元素。
        int[] arr1 = new int[3];
        arr1[0] = 10;
        arr1[1] = 20;
        arr1[2] = 30;
        System.out.println(arr1);// [I@5594a1b5
        System.out.println(arr1[0]);// 10
        System.out.println(arr1[1]);// 20
        System.out.println(arr1[2]);// 30

        int[] arr2 = arr1;
        arr2[0] = 100;
        arr2[1] = 200;
        arr2[2] = 300;

        System.out.println(arr1);// [I@5594a1b5
        System.out.println(arr1[0]);// 100
        System.out.println(arr1[1]);// 200
        System.out.println(arr1[2]);// 300

        System.out.println(arr2);// [I@5594a1b5
        System.out.println(arr2[0]);// 100
        System.out.println(arr2[1]);// 200
        System.out.println(arr2[2]);// 300

在这里插入图片描述

1.8 静态初始化

  • 概述
    • 初始化时指定每个数组元素的初始值,由系统决定数组的长度。
  • 格式
    • 数据类型[] 数组名 = new 数据类型[]{元素值1,元素值2,元素值3…};
    • int[] array = new int[]{1,2,3}
  • 简便格式
    • 数据类型[] 数组名 = {元素值1,元素值2,元素值3…};
    • int[] array = {1,2,3};
  • 注意点:简便格式不能拆分来进行初始化,因为不能确定数组的数据类型。

1.9 数组常遇的问题

  • ArrayIndexOutOfBoundsException 数组s索引越界
    • 当数组中的索引大于数组长度- 1 或者索引小于0时会出现的问题
  • NullPointerException 空指针异常
    • 对象的值是一个null常量

1.10 获取数组的长度

格式:数组名.length

1.11 数组的遍历

		int[] arr1 = {7,3,4,8,5,6,1,98,56,23,4,5,6};
        for (int i = 0;i < arr1.length;i++){
            System.out.println(arr1[i]);
        }
		// 增强for循环 i代表数组中的元素
        for (int i : arr1) {
            System.out.println(i);
        }

增强for循环和普通for循环的区别:

  • 增强for循环中不能获取索引,普通for循环中可以获取索引
  • 增强for循环中不能直接进行运算,普通for循环中可以对数组元素进行运算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值