




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章
数
组Java核心技术
数组属于引用型变量,创建数组需要经过声明数组和为数组分配变量2个步骤声明一维数组有下列两种格式:数组的元素类型
数组名[];数组的元素类型[]数组名;声明二维数组有下列两种格式:数组的元素类型数组名[][];数组的元素类型[][]数组名;注意:与C/C++不同,Java不允许在声明数组中的方括号内指定数组元素的个数,如不许
int
a[12]声明一个数组并没有创建一个对象,此时并不能使用数组。为数组分配元素的格式如下:数组名=new数组元素的类型[数组元素的个数];如float
boy[];boy=new
float[4];声明数组和创建数组可以一起完成,如:float
boy[
]=new
float[4];二维数组的创建:int
mytwo[
][
];mytwo=new
int[3][4];注意:构成二维数组的一维数组不必有相同的长度如:int
a[][]=new
int[3][];a[0]=new
int[6];a[1]=new
int[12];a[2]=new
int[8];一维数组通过索引符访问自己的元素需要注意的是索引从0开始二维数组也通过索引符访问自己的元素数组的元素的个数称作数组的长度。对于一维数组,“数组名.length”的值就是数组中元素的个数;对于二维数组“数组名.length”的值是它含有的一维数组的个数float
a[
]=new
float[12];int
b[
][
]=new
int[3][6];a.length为12b.length为3创建数组后,系统会给数组的每个元素一个默认的值,如,float型是0.0在声明数组的同时也可以给数组的元素一个初始值如float
boy[
]={21.3f,23.5f,1.2f,29.3f}
也可以直接用若干个一维数组初始化一个二维数组,这些一维数组的长度不尽相同int
a[
][
]={{1},{1,1},{1,2,1},{1,3,3,1}}数组属于引用型变量,因此两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素如果使用了下列赋值语句(a和b的类型必须相同):a=b;那么,a中存放的引用和b的相同,这时系统将释放最初分配给数组a的元素,使得a的元素和b的元素相同说明:和类对象的赋值原理一样public
class
Example4_1
{public
static
void
main(String
args[])
{int
a[]={1,2,3,4};int
b[]={100,200,300};System.out.println("数组a的元素个数="+a.length);System.out.println("数组b的元素个数="+b.length);System.out.println("数组a的引用="+a);System.out.println("数组b的引用="+b);System.out.println("a==b的结果是"+(a==b));a=b;System.out.println("数组a的元素个数="+a.length);System.out.println("数组b的元素个数="+b.length);System.out.println("a==b的结果是"+(a==b));System.out.println("a[0]="+a[0]+",a[1]="+a[1]+",a[2]System.out.print("b[0]="+a[0]+",b[1]="+b[1]+",b[2]="}
}4.2.1基于循环语句的遍历JDK1.5中新增的for循环结构,该结构适合于数组类型for(声明循环变量:数组的名字){…}例4-2public
class
Example4_2
{public
static
void
main(String
args[])
{int
a[]={1,2,3,4};char
b[]={"a","b","c","d"};for(int
n=0;n<a.length;n++){//传统方式System.out.println(a[n]);}for(int
n=0;n<b.length;n++){//传统方式System.out.println(b[n]);}
for(int
i:a){ //循环变量i依次取数组a的每一个元素的值(非传统方式)System.out.println(i);•}
for(char
ch:b){//循环变量ch依次取数组b的每一个元素的值(非传统方式)System.out.println(ch);}}}for(声明循环变量:数组的名字){…}中的“声明循环变量”必须是变量声明,不可以使用已经声明过的变量。让Arrays类调用public
static
String
toString(int[]a)方法,
可以得到参数指定的一维数组a的如下格式的字符串表示:[a[0],a[1]
…a[a.length-1]]//测试就是将long类型使用tostring()方法输出为String类型public
class
JLDtoS{public
static
void
main(String[]args){long
a=123;Long
aa=new
Long(a);//使用包装类String
ii=aa.toString();//使用aa对象的toString()方法System.out.println(ii);//输出转换的结果}}//object中的toString方法是对象才能调用的注意:toString()只适用于对象的调用,普通的数据类型不调用,这也就是使用包装类的原因。public
class
A{public
String
toString(){return
"this
is
A";}}如果某个方法里面有如下句子:
A
obj=new
A();System.out.println(obj);会得到输出:this
is
ASystem.out.println(xx),括号里面的“xx”如果不是
String类型的话,就自动调用xx的toString()方法总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法public
class
A{public
String
getString(){return
"this
is
A";}//toString改个名字试试看}A
obj=new
A();System.out.println(obj);会得到输出:xxxx@xxxxxxx的类名加地址形式System.out.println(obj.getString());会得到输出:this
is
AtoString的好处是在碰到“println”之类的输出方法会自动调用,不用显式打出来class
Person
{private
String
name
=
null;private
int
age
=
0;public
Person(String
name,
int
age)
{
=
name;this.age
=
age;}public
String
toString()
{return
name;}}public
class
Test
{public
static
void
main(String[]
args)
{Person
p
=
new
Person("Jack",
20);System.out.println(p);//这时会输出"Jack}}数组在Java里是一种数据类型,因此,它可以作为一种方法的返回值如int[]fun(int[]a){…}举例:编写一个方法,求一组数的最大值,最小值和平均值/*该方法要将求出的最大值,最小值和平均值多个值作为结果返回,可将它们存储到一个数组中,再用return返回*/public
class
Demo{public
static
void
main(String
args[]){double
a[]={1.1,3.4,-9.8,10};double
b[]=max_min_ave(a);for(int
i=0;i<b.length;i++)System.out.println("b["+i+"]="+b[i]);}static
double[]
max_min_ave(double
a[]){double
res[]=new
double[3];double
max=a[0],min=a[0],sum=a[0];for(int
i=0;i<a.length;i++){if(max<a[i])
max=a[i];if(min>a[i])
min=a[i];sum+=a[i];}res[0]=max;res[1]=min;res[2]=sum/a.length;return
res;}}前面所讲的数组都是基本类型数组,如int[]a,即元素的类型是本类型。引用类型数组的数组元素是引用如果该引用类型是类的话,有时也称该数组为对象数组举例:class
Person{public
int
age;public
double
height;public
String
toString(){return"我的年龄是"+age+",我的身高是:"+height;}}public
static
void
main(String[]
args)
{Person
[]student;student=new
Person[2];Person
zhangsan=new
Person();zhangsan.age=10;zhangsan.height=170;Person
lisi=new
Person();lisi.age=11;lisi.height=175;student[0]=zhangsan;student[1]=lisi;System.out.println(zhangsan.toString());System.out.println(student[0].toString());}如果两个类型相同的数组具有相同的引用,那么它们就有完全相同的元素如果想把一个数组的元素中的值复制到另个一个数组中的元素中,后者元素值的改变不会影响到原数组元素的值,反之也是如此,如果想实现这样的目的,显然不能使用数组之间进行引用赋值的方式System类调用方法public
static
void
arraycopy(sourceArray,intindex1,copyArray,int
index2,int
length)可以将数组sourceArray从索引index1开始后的length个素中的数据复制到数组copyArray中,即将数组
sourceArray中索引值从index1到index1+length-1元素的数据复制到数组copyArray的某些元素中;接收数据的
copyArray数组从第index2元素开始存放这些数据。如果接收数据的数组copyArray不能存放下待复制的数据程序运行将发生异常import
java.util.Arrays;public
class
Example4_3
{public
static
void
main(String
args[])
{char
[
]
a
=
{"A","B","C",
"D","E","F"},b
=
{"1","2","3","4","5","6"};int
[
]
c
={-1,-2,-3,-4,-5,-6},d
=
{10,20,30,40,50,60};System.arraycopy(a,
0,
b,
0,
a.length);System.arraycopy(c,
2,
d,
2,
c.length-3);System.out.println("数组a的各个元素中的值:");System.out.println(Arrays.toString(a));System.out.println("数组b的各个元素中的值:");System.out.println(Arrays.toString(b));System.out.println("数组c的各个元素中的值:");System.out.println(Arrays.toString(c));System.out.println("数组d的各个元素中的值:");System.out.println(Arrays.toString(d));}}数组a的各个元素中的值:[A,
B,
C,
D,
E,
F]数组b的各个元素中的值:[A,
B,
C,
D,
E,
F]数组c的各个元素中的值:[-1,
-2,
-3,
-4,
-5,
-6]数组d的各个元素中的值:[10,
20,
-3,
-4,
-5,
60]Arrays类调用public
static
double[
]
copyOf(double[
]
original,innewLength)方法可以把参数original指定的数组中从索引0开始的
newLength个元素复制到一个新数组中,并返回这个新数组,且该新数组的长度为newLength,如果newLength的值大于original的长度,copyOf方法返回的新数组的
newLength索引后的元素取默认值。类似的方法还有:public
static
float[]
copyOf(float[]
original,int
npublic
static
int[]
copyOf(int[]
original,int
newLepublic
static
char[]
copyOf(char[]
original,int
newint
[
]a={100,200,300,400};int
[
]b=Arrays.copyOf(a,5);b[0]=100,b[1]=200,b[2]=300,b[3]=400,b[4]=0可以把数组中部分元素的值复制到另一个数组中,使用
copyOfRange方法public
static
double[
]
copyOfRange(double
[
]
origifrom,int
to)复制从from开始至to-1如:int
[
]a={100,200,300,400,500,600};int
[
]b=Arrays.copyOfRange(a,2,5);b[0]=300,b[1]=400,b[2]=500import
java.util.*;public
class
Example7_4
{public
static
void
main(String
args[]){int
[]
a
={11,22,33,44,55},b,c,d;b=Arrays.copyOf(a,8);System.out.println("数组a的各个元素中的值:");System.out.println(Arrays.toString(a));System.out.println("数组b的各个元素中的值:");System.out.println(Arrays.toString(b));c=Arrays.copyOfRange(a,3,5);System.out.println("数组c的各个元素中的值:");System.out.println(Arrays.toString(c));d=Arrays.copyOfRange(a,1,7);System.out.println("数组d的各个元素中的值:");System.out.println(Arrays.toString(d));}}数组a的各个元素中的值:[11,
22,
33,
44,
55]数组b的各个元素中的值:[11,
22,
33,
44,
55,
0,
0,
0]数组c的各个元素中的值:[44,
55]数组d的各个元素中的值:[22,
33,
44,
55,
0,
0]可以使用循环语句对数组排序,也可以使用循环语句查找某个数据是否在一个排序的数组中。Arrays类调用相应的方法可以实现对数组的快速排序,比如,Array类调用public
static
void
sort(double
a[])方法可以把参数a指定的double类型数组按升序排序。Array类调用public
static
void
sort(double
a[
],int
start,int方法可以把参数a指定的double类型数组中索引
star至end-1的元素的值按升序排序。public
static
int
binarySearch(double[]
a,
double
nu方法判断参数number指定的数值是否在参数a指定的数组中,即number是否和数组a的某个元素的值相同,其中数组a必须是事先已排序的数组。如果number和数组a中某个元素的值相同,int
binarySearch(double[]
a,double
number)方法返回(得到)该元素的索引,否则返回一个负数。例7-5import
java.util.*;public
class
Example7_5
{public
static
void
main(String
args[])
{Scanner
scanner
=
new
Scanner(System.in);int
[]
a={12,34,9,23,45,6,45,90,123,19,34};Arrays.sort(a);System.out.println(Arrays.toString(a));System.out.println("输入整数,程序判断该整数是否在数组中:");
while(scanner.hasNextInt()){int
number
=
scanner.nextInt();int
index=Arrays.binarySearch(a,number);if(index>=0){System.out.println(number+"和数组中索引为"+index+"的元素值同");}else{System.out.println(number+"不与数组中任何元素值相同");}System.out.println("是否继续输入整数?输入任何非整数即可结束}
}}Scanner类中nextInt()方法用于从键盘输入一个整数hasNextInt()用于判断输入的是否是整数,若是,则返回值为true,若不是,返回值为false4.5.1枚举类型的定义枚举类型的定义包括枚举声明和枚举体,语法格式如下:enum枚举名{常量列表}枚举体中的内容是用逗号分隔的字符序列,称为枚举类型的常量。enum
Season{spring,summer,autumn,winter}声明了一个枚举类型后,就可以用该枚举类型的枚举名声明一个枚举变量,例如:Season
x;声明了一个枚举变量x。枚举变量x只能取值枚举类型中的常量。通过使用枚举名和“.”运算符获得枚举类型中的常量,例如:x=Season.spring;public
class
exp5
{public
enum
Weekday
{星期一,星期二,星期三,星期四,星期
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程管理咨询合同范本
- 合同管理的信息化3篇
- 场地租赁合同范文(19篇)
- 成长记录单自我评价(8篇)
- 年度学校总务工作总结(4篇)
- 厂长年终演讲词(4篇)
- 新学期学生会组织部工作计划(5篇)
- 思维导图辅助高中英语语篇教学理论探讨
- 矿山测量与资源评估考核试卷
- 江苏海州区招聘社区专职工作者笔试真题2024
- 各层次养老机构定价方法及案例
- 二方审核计划
- DB62∕T 3176-2019 建筑节能与结构一体化墙体保温系统应用技术规程
- 优秀病例演讲比赛PPT
- 吉林省矿产资源概况及分布
- 最新肺结核诊断和治疗指南
- 公司员工基本礼仪培训ppt完整版课件
- 工程项目综合应急预案(通用版)
- 半桥LLC谐振变换器设计与仿真
- 常见食物的性味归经附表
- 城市桥梁工程竣工验收
评论
0/150
提交评论