`
nudtgk2000
  • 浏览: 72969 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

马士兵课程笔记(续4)

阅读更多

数组

  • 数组可以看成是多个相同类型数据组合,对这些数据的统一管理。
  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

差别:C/C++中的数组是可以分配在栈上的

  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。

一维数组的声明

格式:type var[]; 或 type[] var;

  • Note:Java语言中声明数组时不能指定其长度(而在创建时,比较C/C++);

数组对象的创建

格式: 数组名 = new 数组元素类型[元素个数]

public class Test {
    public static void main(String args[]) {
        int[] s;    // 在栈内存中声明数组引用
        s = new int[5];    // 在堆内存中创建数组,并对基本类型的元素初始化{0, 0, 0, 0, 0}, s引用指向它
    }
}

 元素为引用数据类型的数组

Note:每一个元素(引用数据类型)都需要初始化。

public class Test {
    public static void main(String[] args) {
        Date[] days;
        days = new Date[3];
        for (int i=0; i<3; i++) {
            days[i] = new Date(2004, 4, i+1);
        }
    }
}

class Date {
    int year; int month; int day;
    Date(int y, int m, int d) {
        year =y; month =m; day = d;
    }
}

 

数组初始化

  • 动态初始化 —— 数组定义与为数组元素分配空间和赋值的操作分开进行
int[] a;
a = new int[3];
a[0] = 3; a[1] = 9; a[2] = 8;

Date[] days;
days = new Date[3];
day[0] = new Date(1, 4, 2004);
day[1] = new Date(2, 4, 2004);
day[2] = new Date(3, 4, 2004);
  •  静态初始化 —— 在定义数组的同时就为数组元素分配空间并赋值
int[] a = {3, 9, 8};

Date[] days = {
    new Date(1, 4, 2004);
    new Date(2, 4, 2004);
    new Date(3, 4, 2004);
};
  •  数组元素的默认初始化

数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被默认初始化

... ...
int[] a = new int[5];
Date[] days = new Date[3];

System.out.println(a[3]);
System.out.println(days[3]);
... ...

/* Output:
0
null
*/

数组元素的引用

arrayName[index]

Note: 在用到数组长度的地方都用arrayName.length属性而非长度值;

 

tips: 

  • public satic void System.exit(int static) —— 当前运行的虚拟机退出,0正常退出,非0非正常退出(其实两者在Windows下没区别)更多详情见API
  • 基础类型包装类 —— 把基础类型的值包装进对象,有Byte,Short,Integer,Long,Double,Float,Character,Boolean。除了Character类外它们都有把String形式的值转换成基础类型的静态方法,如public static int Integer.parseInt(String value) throws NumberFormatException, 更多详情见API。
  • 对每次循环都要用到的变量,把定义放在循环外,循环内赋值,节省每次分配/回收内存操作的花销。

二维数组

  • 可以视为数组的数组。 如: int a[][] = {{1, 2}, {3, 4, 5, 6}, {7, 8, 9}};
  • 多维数组的声明及初始化应从高维到低维从左到右从外到里
// 静态初始化
int intA[][] = {{1, 2}, {2, 3}, {3, 4, 5}};
// int intB[3][2] = {{1, 2}, {2, 3}, {4, 5}};    非法

// 动态初始化
int a[][] = new int[3][5];

int b[][] = new int[3][];
// int t[][] = new int[][4];    非法
b[0] = new int[2];
b[1] = new int[3];
b[2] = new int[5];

 数组的拷贝

  • 使用java.lang.System类的静态方法System.arraycopy

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

Note: 这个函数名里c居然没有大写

将源数组src从第srcPos项元素开始的length项元素拷贝到目标数组dest从destPos项开始的length个位置;

若length超过目标数组边界会抛出 IndexOutOfBoundsException 异常。

更多见API。

String[] s = ("Microsoft", "IBM", "Sun", "Oracle", "Apple");
String[] sBak = new String[6];
System.arraycopy(s, 0, sBak, 0, s.length);

for(int i=0; i < sBak.length; i++) {
    System.out.println(sBak[i]);    // sBak[i]和s[i]的值相同,是字符串常量的引用
}

// 二维整型数组拷贝
int[][] a = {{1, 2}, {1, 2, 3}, {3, 4}};
int[][] aBak = new int[3][];
System.arraycopy(a, 0, aBak, 0, a.length);
a[2][1] = 100;

for(int i=0; i<aBak.length; i++) {
    for(int j=0; j<aBak[i].length; j++) {
        System.out.println(aBak[i][j]);    // 因为aBak[2]拷贝了a[2]的数组引用,所以aBak[2][1]和a[2][1]是同一个变量,已经改成了100
    }
}

 

 

 

  • 大小: 20.8 KB
  • 大小: 70.6 KB
分享到:
评论

相关推荐

    马士兵课程笔记(续5)

    【标题】"马士兵课程笔记(续5)"主要聚焦在编程和软件开发的某一特定领域,结合了“源码”和“工具”的概念。这可能是关于解析、分析或利用源代码,以及使用特定工具来提升开发效率或理解复杂系统的主题。马士兵是一...

    基于S7-300PLC与MCGS6.2的饮料罐装生产线自动化控制系统设计,包含仿真、程序、IO表与电气原理,实现自动操作、灌装报警及瓶数记录功能 ,基于PLC的饮料罐装生产线控制系统设计 S7-30

    基于S7-300PLC与MCGS6.2的饮料罐装生产线自动化控制系统设计,包含仿真、程序、IO表与电气原理,实现自动操作、灌装报警及瓶数记录功能。,基于PLC的饮料罐装生产线控制系统设计。 S7-300PLC MCGS6.2仿真 仿真,程序,IO表,电气原理图,6500字说明。 实现功能有: (1)系统通过开关设定为自动操作模式,一旦启动,则传送带的驱动电机启动并一直保持到停止开关动作或罐装设备下的传感器检测到一个瓶子时停止;瓶子装满饮料后,传送带驱动电机必须自动启动,并保持到又检测到一个瓶子或停止开关动作。 (2)当瓶子定位在灌装设备下时,停顿1秒,罐装设备开始工作,灌装过程为5秒钟,罐装过程应有报警显示,5秒后停止并不再显示报警。 (2)用两个传感器和若干个加法器检测并记录空瓶数和满瓶数,一旦系统启动,必须记录空瓶和满瓶数,设最多不超过99999999瓶。 (4)可以手动对计数器清零(复位)。 ,关键词:S7-300PLC; MCGS6.2仿真; 传送带驱动电机; 传感器检测; 瓶装; 空瓶数; 满瓶数; 报警显示; 自动操作模式; 灌装设备。,基于S7-300PLC的饮料罐装

    python加密货币时间序列预测源码+数据集-最新出炉.zip

    python加密货币时间序列预测源码+数据集-最新出炉 加密货币分析: 对各种加密货币的数据进行分析和研究。可能会使用到从各种来源收集的数据,包括但不限于加密货币的价格、市值、交易量、交易时间等信息。 探索加密货币市场的趋势和模式,例如价格的波动情况、不同加密货币之间的相关性等。 数据处理与操作: 可能使用 Python 语言(Kaggle 上常用的数据分析语言),并运用一些数据处理和分析的库,如 pandas 用于数据的读取、清洗、整理和转换操作,将原始的加密货币数据转换为更易于分析的格式。 可视化展示: 通过可视化工具,如 matplotlib 或 seaborn 库,将加密货币的信息以图表的形式展示出来,以帮助直观地理解数据中的关系和趋势。 统计分析或预测: 可能会进行一些基本的统计分析,如计算加密货币价格的均值、中位数、标准差等统计量,以描述数据的特征。 或者使用机器学习或时间序列分析的方法对加密货币的价格进行预测,根据历史数据预测未来价格走势。 例如,使用 scikit-learn 进行简单的回归分析: 数据挖掘与特征提取: 挖掘加密货币数据中的特征,如找出影响价格的关键因素,对数据中的特征进行筛选和提取,以帮助更好地理解加密货币的市场行为。

    面对程序设计GJava

    类和对象、继承、封装、多态、接口、异常

    TF_demo1_keras.ipynb

    gee python相关教程

    夜间灯光数据 2023年全球_中国夜间灯光数据合集(数据权威)

    夜间灯光强度(平均灯光强度)的高低反映了一个地区城市化发展的水平,平均灯光强度越高,说明该地区城市群越多,城市化程度越高。夜间灯光数据现在越来越广泛地应用于经济增长分析、经济地理、城市经济学、数字经济等众多领域。 本数据包括三套: [1]中国类DMSP-OLS灯光数据1992-202 [2]中国超长序列灯光数据1984-2020 [3]全球类NPP-VIIRS夜间灯光数据2000-2022 包括:全国各省、市、县夜间灯光数据 矫正后夜间灯光数据 细分:标准差、平均值、总值、最大值和最小值

    工程项目总监绩效考核表.xls

    工程项目总监绩效考核表

    (数据权威)各省份一般公共预算转移支付数据(附送地级市转移支付)

    首先解释一下什么叫转移支付。其实,这和养老金的中央调剂是一样的。 每年,地方都要向中央缴纳财政。而中央又要根据各地方的财政实力,给予转移支付。比如一些经济弱省,本身财政收入就不够支出的,还得上交一部分给中央,怎么维持财政运转?由于各省市直接的财政收入能力存在差异,中央为实现各个地方的公共服务水平平等,于是便有了财政转移支付制度。 简单理解就是富省养穷省。 2022年全国一般预算内财政收入203703亿元,给地方转移支付了97144.75亿元,转移支付数额创下新高。

    基于门控卷积和堆叠自注意力的离线手写汉字识别算法研究.pdf

    基于门控卷积和堆叠自注意力的离线手写汉字识别算法研究.pdf

    逐月中国工业用水空间分布数据集(数据权威)

    【数据介绍】   作为第二大人类部门用水,高质量的工业用水格网数据对于水资源研究和管理至关重要。中国工业用水格网数据(China Industrial Water Withdrawal dataset, CIWW)基于超过 40 万家企业数据、月度工业产品产量数据和连续工业用水统计数据制作得到的一套1965-2020年逐月中国工业用水数据集,其空间分辨率为 0.1°和 0.25°。数据集包括工业用水、企业数量和企业生产总值(辅助数据)等变量,可被用于水文、地理学、环境、可持续发展等方面科学研究。 【数据来源】   数据来源为《中国经济普查年鉴》(省级工业取水量、工业产出)、《中国工业企业数据库》(企业地理位置、产值)、《中国工业产品产量数据库》(工业产品月生产量),以及《中国水资源公报》和(Zhou et al, 2020, PNAS)的工业用水量数据。 【数据处理】 首先通过2008年企业分布数据、经济普查年鉴中分省分部门的工业用水量和工业产值计算得到分省分部门工业用水效率和工业产品产量数据,得到了2008年逐月工业用水数据。然后结合中国水资源公报和相关文献中省级工业用水数据,以2008年工业用水的时空格局作为基础分配工业用水数据,最终得到1965-2020年逐月工业用水的格网数据。详细方法见High-resolution mapping of monthly industrial water withdrawal in China from 1965 to 2020 (Hou et al, 2024, ESSD). 将数据集与统计数据记录和其他数据集进行了验证,结果表示在时间尺度和空间尺度上都与统计数据具有一致性,相比已有工业用水数据有更好的精度。

    65 -质量管理部经理绩效考核表1.xlsx

    65 -质量管理部经理绩效考核表1

    11 -电脑部经理绩效考核表1.xlsx

    11 -电脑部经理绩效考核表1

    大英赛写作必备:实用英语万能句及其应用技巧

    内容概要:本文提供了针对大学生英语竞赛写作准备的重要资源——一系列通用的英文句子模板。这些模板涵盖了现代经济社会的各种话题,从科技进步到环境保护,以及个人品质和社会责任等,并且适用于论述类文章、观点对比和个人见解的表达。文章通过对每一句话的应用环境解释和语法提示,确保使用者可以在实际写作中正确且有效地应用这些表达方式。 适合人群:正在准备参加大学生英语竞赛的学生及其他希望提高书面表达能力的学习者。 使用场景及目标:考生能够在竞赛时间内迅速构建思路完整的文章,增强语言表达的流利性和规范性;帮助学习者积累高级词汇,提升英语写作水平并培养良好的思维逻辑。 阅读建议:结合历年优秀范文进行深入学习,熟悉不同类型话题下的表述方法;练习将提供的句子融入自身创作的文章中,通过不断修订和完善来巩固记忆。同时也可以用于日常的英语写作训练当中。

    法律事务专员绩效考核表.xls

    法律事务专员绩效考核表

    apache-commons-digester-javadoc-1.8.1-19.el7.x64-86.rpm.tar.gz

    1、文件内容:apache-commons-digester-javadoc-1.8.1-19.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-digester-javadoc-1.8.1-19.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    永磁同步电机磁场定向控制(矢量控制)Simulink仿真模型波形展现与解析,永磁同步电机的磁场定向控制(矢量控制)simulink仿真模型,波形完美 ,核心关键词:永磁同步电机; 磁场定向控制(矢量控

    永磁同步电机磁场定向控制(矢量控制)Simulink仿真模型波形展现与解析,永磁同步电机的磁场定向控制(矢量控制)simulink仿真模型,波形完美 ,核心关键词:永磁同步电机; 磁场定向控制(矢量控制); Simulink仿真模型; 波形完美;,永磁同步电机矢量控制仿真模型:磁场完美调控,波形精确无误

    07 -储运部经理绩效考核表1.xlsx

    07 -储运部经理绩效考核表1

Global site tag (gtag.js) - Google Analytics