版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
控制结构、方法与数组应用单元三if语句switch语句循环语句目录CONTENTS123方法一维数组目录CONTENTS45排序算法二维数组673.5.1一维数组使用数组时,需要声明、创建、赋值和使用这几个步骤。1.数组的声明声明数组的语法形式如下,推荐使用前一种。数据类型[]数组名;数据类型数组名[];声明数组就是告诉计算机,该数组中元素是什么类型的,例如:intengNo[];double[]engSalary;String[]engName;//String字符串是引用类型,engName数组里存放的是引用类型元素必须注意的是,Java语言中声明数组的时候不可以指定数组长度,例如intengNo[100]是非法的。2.创建数组所谓创建数组,就是要为数组分配内存空间,不分配内存是不能存放数组元素的,创建数组就是在内存中划分出几个连续的空间用于依次存储数组中的数据元素,其语法形式如下。数组名=new数据类型[数组长度];可以把数组声明和数组创建合并,其语法形式为:数据类型[]数组名=new数据类型[数组长度];其中数组长度就是数组中存放的元素个数,必须是整数。例如:int[]engNo=newint[5];String[]engName=newString[5];3.5.1一维数组3.数组元素赋值和使用创建完数组之后,就可以给数组赋值并使用数组了。在使用数组时,主要通过下标来访问数组元素。给数组赋值的语法形式如下。数组名[数组下标]=数值;尤其需要注意的是,数组下标从0开始编号,数组名[0]代表数组中第1个元素,数组名[1]代表数组中第2个元素……数组下标的最大值为数组长度减1,如果下标值超过最大值会出现数组下标越界问题。例如:engNo[0]=1001;engNo[l]=1002;engName[4]="孙传杰";有这样一个例子:假设“蓝桥系统”中可以存放10个Java工程师信息,现在需要分别输入这10个Java工程师的底薪,计算出底薪大于等于6000的高薪人员比例以及这些高薪人员的底薪平均值,程序运行结果如图所示。3.5.1一维数组之前的做法是:使用for循环,在用户输入的时候,立刻进行判断,统计出高薪人员的人数和髙薪人员底薪总和,然后计算得出结果。但如果需要保留这10个Java工程师底薪的信息,并需要根据用户选择输出这个工程师的底薪,这样的做法就完成不了任务了。接下来采用数组来完成这个案例,具体代码如下。importjava.util.Scanner;publicclassTestArray1{ publicstaticvoidmain(String[]args){ inthighNum=0;//底薪大于等于6000的Java工程
//师人数 intsumBasSalary=0;//高薪人员底薪总和 int[]basSalary=newint[10];//创建一个长度为10的整型数组 Scannerinput=newScanner(System.in); for(inti=1;i<=10;i++){ System.out.print("请输入第"+i+"个工程师底薪:");
//依次让用户输入的第i个工程师的底薪,注意下标是i-1 basSalary[i-1]=input.nextInt(); if(basSalary[i-1]>=6000){ highNum=highNum+1;//高薪人员计数 sumBasSalary=sumBasSalary+basSalary[i-1];//高薪人员底薪求和}} System.out.println("10个Java工程师中,高薪人员比例为:"+highNum/10.0*100+"%"); System.out.println("高薪人员平均底薪为:"+sumBasSalary/highNum); System.out.print("请输入你需要获取第几个工程师的底薪:"); intindex=input.nextInt(); System.out.println("第"+index+"个工程师的底薪为:"+basSalary[index-1]);}}3.5.2引用数据类型前面学习Java基本数据类型的时候提到,Java数据类型分为两大类,分别是基本数据类型和引用数据类型,接下来会从存储空间的角度讲解引用数据类型。假设声明Java工程师的底薪变量basSalary并对其赋值,其语句为:IntbasSalary=6000;其内存操作为:首先系统给变量basSalary分配了4个字节的内存空间,然后把6000这个int型的数值赋给变量basSalary。如果用数组(引用数据类型)存放5个Java工程师的底薪,其中第1个工程师的底薪为6000,其语句为:int[]basSalary;basSalary=newint[5];basSalary[0]=6000;其内存操作为:首先声明了一个basSalary变量,这个变量是在栈中存放的一个地址,用于指向实际int型数组存放的位置。在堆内存中创建5个连续的、存放int型元素的空间,并把存储空间的首地址赋给变量basSalary,使变量basSalary指向数组存放的位置。在堆内存创建5个连续的、存放int型元素的空间时,会默认进行初始化,如图3.16所示。如果数组元素的类型为基本数据类型,其默认初始化的值为0、0.0、'\u0000'或false;如果是引用数据类型,默认初始化的值为null。3.5.2引用数据类型把6000这个int型的数值放入通过basSalary指向的数组存储空间的第1个位置,如图所示。内存存储形式的不同是基本数据类型和引用数据类型本质的区别,引用数据类型的名称实际代表的是存放引用数据类型的地址,不是引用数据类型本身。Java语言中,数组是引用数据类型,类以及后面要学到的接口也是引用数据类型,前面用到的存放字符串的String类型就是引用数据类型。3.5.3值传递与引用传递值传递和引用传递是调用方法时必须注意的问题。接下来看这样一段代码。publicclassTestArray2{ publicstaticvoidmain(String[]args){ intengNo1=1001; intengNo2=1002; System.out.println("值传递交换数值:"); System.out.println("调用前工程师1、工程师2编号为:"+engNo1+"\t"+engNo2); //调用前 exchange1(engNo1,engNo2);//值传递,传递的实质是数值的副本,所以没有交换原值 System.out.println("调用后工程师1、工程师2编号为:"+engNo1+"\t"+engNo2); //调用后 int[]engNo=newint[2]; engNo[0]=1001; engNo[1]=1002; System.out.println("引用传递交换数值:"); System.out.println("调用前工程师1、工程师2编号为:"+engNo[0]+"\t"+engNo[1]); //调用前 exchange2(engNo);//引用传递,传递的实质是指向数组的地址,所以交换了数组里的值 System.out.println("调用后工程师1、工程师2编号为:"+engNo[0]+"\t"+engNo[1]);
3.5.3值传递与引用传递
//调用后} //值传递,交换int型a和b的值 publicstaticvoidexchange1(inta,intb){ inttemp=a; a=b; b=temp; } //引用传递,交换数组x第1个元素和第2个元素的值 publicstaticvoidexchange2(int[]x){ inttemp=x[0]; x[0]=x[1]; x[1]=temp;}}采用值传递时,其传递的实质是数值的副本,所以在调用使用值传递交换数据的方法时,只是在方法内将值的副本的数据内容进行了交换,其原数据本身并没有发生变化。而采用引用传递时,其传递的实质为引用的地址,本例中传递的是数组的地址,在调用使用引用传递交换数据的方法时,是对这个地址指向的数据进行了交换,即对原数组的值进行了交换。程序运行结果如图所示3.5.3值传递与引用传递案例中,系统中可以存放10个Java工程师信息,容许用户输入这10个Java工程师的底薪,当时的需求如下。(1)计算出底薪大于等于6000的高薪人员比例以及这些高薪人员的底薪平均值。(2)输出用户选择的某个工程师的底薪。现在调整需求,在用户输入这10个Java工程师的底薪后,对他们的底薪进行加薪,加薪标准如下。(1)底薪大于等于6000元的高薪人员,加薪5%。(2)非高薪人员,加薪10%。最后输出用户选择的某个工程师加薪后的底薪,程序运行结果如图所示3.5.3值传递与引用传递importjava.util.Scanner;publicclassTestArray3{ staticint[]basSalary=newint[10]; //创建一个长度为10的整型数组,存放工程师底薪 staticScannerinput=newScanner(System.in); publicstaticvoidmain(String[]args){
//调用inputEngSalary方法输入工程师底薪并执行加薪操作 inputEngSalary(basSalary);
//采用引用传递 System.out.print("请输入你需要获取第几个工程师加薪后的底薪:"); intindex=input.nextInt(); System.out.println("第"+index+"个工程师加薪后的底薪为:"+basSalary[index-1]);} publicstaticvoidinputEngSalary(int[]salary){ for(inti=1;i<=10;i++){ System.out.print("请输入第"+i+"工程师底薪:"); salary[i-1]=input.nextInt(); if(salary[i-1]>=6000){ salary[i-1]=salary[i-1]+(int)(salary[i-1]*0.05);//高薪人员加薪5% }else{ salary[i-1]=salary[i-1]+(int)(salary[i-1]*0.1);//非高薪人员计数10%}}
}}3.5.4—维数组初始化在前面的案例中,一般采用for循环的方式给数组赋值,接下来介绍一维数组初始化的方法。在声明、创建的时候同时初始化,例如:int[]engNo=newint[]{1001,1002,1003,1004,1005};String[]engName=newString[]{"柳海龙","孙传杰","孙悦");甚至可以直接写成:int[]engNo={1001,1002,1003,1004,1005};String[]engName={"柳海龙","孙传杰","孙悦"};3.5.4—维数组初始化语句String[]engName={"柳海龙","孙传杰","孙悦"};对数组声明、创键并初始化的过程可以细分为如下几步。(1)String[]engName——在栈内存中分配1个空间,用于存放字符串数组的地址。(2)engName=newString[3];——在堆内存中分配3个连续空间,并把地址赋给engName,使栈内存中的地址指向这3个连续的内存空间,这3个空间里存放的默认初始值为null。(3)engName[0]="柳海龙";——在堆内存中创建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学六年级数学下册综合与实践“项目化学习”知识清单
- 初中化学九年级一轮复习燃烧与灭火精讲教案
- 人工智能在金融行业伦理与责任研究
- 初中八年级物理《力学做功概念的定量建构与跨学科迁移》创新教案
- 小学数学二年级上册期中试卷D卷核心考点深度解析与思维进阶教案
- 仪表电缆知识测试题及答案
- 探寻自考试题及答案下载平台
- 2026年网格化管理培训考试试卷及答案
- 2026年水利工程移民安置职称考试试题库及答案
- 2026年临床用血管理办法考试题(附答案)
- 配电箱培训接线课件
- YB-T6332-2024《钢铁行业用塑烧板除尘器》
- 图书馆招聘考试题目含答案
- 2025至2030中国偏头痛行业项目调研及市场前景预测评估报告
- 2025年大学《播音与主持艺术-新媒体播音主持》考试参考题库及答案解析
- AQ6201-2024《煤矿安全监控系统技术要求》
- 国家基层高血压防治管理指南 2025版图文解读
- 2025年甘肃省中考语文试卷真题(含标准答案)
- 中国银行普惠对私考试题库
- 山东省城乡历史文化保护传承体系规划
- 食品的化学性污染及其预防
评论
0/150
提交评论