版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章數(shù)組6.1一維數(shù)組6.2一維數(shù)組引用舉例6.3二維數(shù)組6.4二維數(shù)組的引用求30名學(xué)生的成績的平均成績。
(1)用變量實(shí)現(xiàn)
doubleg1,g2,…,g30,sum,average;
g1=80;g2=85.2;…;g30=78;
sum=g1+g2+….+g30;
average=sum/30.0;
(2)用數(shù)組實(shí)現(xiàn)
doubleg[]={80,85.2,…,78};
doublesum=0,average;
for(inti=0;i<=29;i++){sum=sum+g[i];}
average=sum/30.0;
6.1一維數(shù)組
Java語言中,數(shù)組被定義為:
(1)數(shù)組是一個(gè)對(duì)象(object),屬于引用類型,它由一系列具有相同類型的帶序號(hào)的元素組成。這些元素的序號(hào)從0開始編排,并且通過下標(biāo)操作符[?]中的數(shù)字引用它們。
(2)數(shù)組中的每個(gè)元素相當(dāng)于該對(duì)象的數(shù)據(jù)成員變量,數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型。
(3)根據(jù)數(shù)組中下標(biāo)的個(gè)數(shù)(或方括號(hào)的對(duì)數(shù))可將數(shù)組區(qū)分為只有一對(duì)方括號(hào)的一維數(shù)組和有兩對(duì)方括號(hào)的二維數(shù)組。
只有一個(gè)下標(biāo)的數(shù)組稱為一維數(shù)組,它是數(shù)組的基本形式。建立一維數(shù)組通常包括聲明數(shù)組、創(chuàng)建數(shù)組對(duì)象和初始化數(shù)組三步。6.1.1一維數(shù)組的聲明
一維數(shù)組的聲明格式如下:類型標(biāo)識(shí)符數(shù)組名[];
或類型標(biāo)識(shí)符[]數(shù)組名;
說明:
(1)類型標(biāo)識(shí)符:是指數(shù)組元素的數(shù)據(jù)類型,它可以是Java的基本類型和引用類型。
(2)數(shù)組名:是數(shù)組對(duì)象的引用變量名,這個(gè)名稱應(yīng)遵從Java標(biāo)識(shí)符定義規(guī)則。
(3)數(shù)組的維數(shù):數(shù)組的維數(shù)是用方括號(hào)“[]”的個(gè)數(shù)來確定的。對(duì)于一維數(shù)組來說,只需要一對(duì)方括號(hào)。
例如:intabc[?];//聲明名為abc的一維整型數(shù)組
double[?]example2;/*聲明名為example2
的雙精度型一維數(shù)組*/注意:聲明一維數(shù)組時(shí),系統(tǒng)只為數(shù)組對(duì)象的引用變量在內(nèi)存的變量存儲(chǔ)區(qū)中分配存儲(chǔ)空間,但并未創(chuàng)建具體的數(shù)組對(duì)象,所以,這個(gè)變量的值為null。數(shù)組名的內(nèi)存分配6.1.2創(chuàng)建一維數(shù)組對(duì)象
創(chuàng)建一維數(shù)組對(duì)象主要包括三個(gè)方面:
(1)為數(shù)組對(duì)象在對(duì)象存儲(chǔ)區(qū)中分配存儲(chǔ)空間;
(2)對(duì)數(shù)組對(duì)象進(jìn)行初始化;
(3)將新創(chuàng)建的數(shù)組對(duì)象與已聲明的引用數(shù)組對(duì)象的變量(即數(shù)組名)關(guān)聯(lián)起來。
一維數(shù)組對(duì)象的創(chuàng)建可以通過直接指定數(shù)組元素初始值的方式完成,也可以用new操作符完成。
1.直接指定初值的方式創(chuàng)建數(shù)組對(duì)象
例如:int[]a1={23,–9,38,8,65};
數(shù)組元素的初值依次寫入賦值號(hào)后的一對(duì)花括號(hào)內(nèi),各個(gè)元素值間用逗號(hào)分隔,給這個(gè)數(shù)組的所有元素賦上初始值;初始值的個(gè)數(shù)也就確定了數(shù)組的長度。
這條語句聲明數(shù)組名為a1(a1也稱為引用數(shù)組對(duì)象的變量名,);數(shù)組元素的數(shù)據(jù)類型為整型(int,占4個(gè)字節(jié)),共有5個(gè)初始值,故數(shù)組元素的個(gè)數(shù)為5。
例如:int[]a1={23,–9,38,8,65};
該語句為Java分配存儲(chǔ)空間提供了所需要的全部信息,系統(tǒng)可為這個(gè)數(shù)組對(duì)象分配5*4=20個(gè)字節(jié)的連續(xù)存儲(chǔ)空間。a1數(shù)組的值是a1關(guān)聯(lián)的數(shù)組對(duì)象的首地址,如圖所示。a1關(guān)聯(lián)對(duì)象示意圖數(shù)組對(duì)象的元素由a1[?]?引用,經(jīng)過初始化后,使a1[0]?=?23,a1[1]?=?-9,a1[2]?=?38,a1[3]?=?8,a1[4]?=?65,如圖6.3所示。
注意:Java中的數(shù)組元素下標(biāo)從0開始。a1數(shù)組的初始化
2.用關(guān)鍵字new創(chuàng)建數(shù)組對(duì)象
用關(guān)鍵字new創(chuàng)建數(shù)組對(duì)象,并按照J(rèn)ava提供的數(shù)據(jù)成員默認(rèn)初始化原則對(duì)數(shù)組元素賦初值。用關(guān)鍵字new來創(chuàng)建數(shù)組對(duì)象有兩種方式。
(1)先聲明數(shù)組,再創(chuàng)建數(shù)組對(duì)象。這實(shí)際上由兩條語句構(gòu)成,格式如下:
類型標(biāo)識(shí)符數(shù)組名[];
數(shù)組名=new類型標(biāo)識(shí)符[數(shù)組長度];
其中,第一條語句是數(shù)組的聲明語句;第二條語句是創(chuàng)建數(shù)組對(duì)象,并初始化。
注意:兩條語句中的數(shù)組名、類型標(biāo)識(shí)符必須一致。數(shù)組長度通常是整型常量,用以指明數(shù)組元素的個(gè)數(shù)。
例如:inta[];
a=newint[9];
定義a數(shù)組對(duì)象有9個(gè)元素,并按照J(rèn)ava提供的數(shù)據(jù)成員默認(rèn)初始化原則進(jìn)行初始化,如圖所示。用new創(chuàng)建數(shù)組對(duì)象并初始化
(2)在聲明數(shù)組的同時(shí)用new關(guān)鍵字創(chuàng)建數(shù)組對(duì)象,并初始化。這種初始化實(shí)際上是將上面所述的兩條語句合并為一條語句。其格式如下:
類型標(biāo)識(shí)符數(shù)組名[]=new類型標(biāo)識(shí)符[數(shù)組長度];
或
類型標(biāo)識(shí)符[]數(shù)組名=new類型標(biāo)識(shí)符[數(shù)組長度];
例如:int[]a=newint[10];
或inta[]=newint[10];
6.1.3一維數(shù)組的引用
一維數(shù)組元素的引用格式如下:數(shù)組名[數(shù)組下標(biāo)]
其中,數(shù)組名是與數(shù)組對(duì)象關(guān)聯(lián)的引用變量;數(shù)組下標(biāo)是指元素在數(shù)組中的位置,數(shù)組下標(biāo)的取值范圍是0~(數(shù)組長度–1),下標(biāo)值可以是整數(shù)型常量或整數(shù)型變量表達(dá)式。
例如,int[?]a=newint[10];
a[3]=25;(合法)a[3+6]=90;(合法)
a[10]=8;(錯(cuò)誤)
下標(biāo)從0開始到9正好10個(gè)元素,不存在下標(biāo)為10的數(shù)組元素a[10]。
6.2一維數(shù)組引用舉例
6.2.1測定數(shù)組的長度
在Java語言中,數(shù)組也是一種對(duì)象。數(shù)組經(jīng)初始化后就確定了它的長度(數(shù)組元素的個(gè)數(shù)),Java用一個(gè)數(shù)據(jù)成員length來測定數(shù)組的長度值。第六章程序位置
【示例程序C6_1.java】數(shù)組的聲明、初始化和其長度的測定。
public
classC6_1
{public
static
voidmain(Stringarg[])
{int
i;
double
a1[];//[]放在引用變量后面聲明
char[]a2;//[]放在引用變量前面聲明
a1=new
double[8];//創(chuàng)建a1數(shù)組,數(shù)組元素個(gè)數(shù)為8,類型double型
a2=new
char[8];//創(chuàng)建a2數(shù)組,數(shù)組元素個(gè)數(shù)為8,類型char型
int
a3[]=new
int[8];//創(chuàng)建a3數(shù)組,數(shù)組元素個(gè)數(shù)為8,類型int型
byte[]a4=new
byte[8];//創(chuàng)建a4數(shù)組,數(shù)組元素個(gè)數(shù)為8,類型byte型
char
a5[]={'A','B','C','D','E','F','H','I’};
//創(chuàng)建a5數(shù)組,直接指定初值
//下面各句測定各數(shù)組的長度
System.out.println("a1.length="+a1.length);
System.out.println("a2.length="+a2.length);
System.out.println("a3.length="+a3.length);
System.out.println("a4.length="+a4.length);
System.out.println("a5.length="+a5.length);
//以下各句引用數(shù)組中的每一個(gè)元素,為各元素賦值
for(i=0;i<8;i++)
{a1[i]=100.0+i;a3[i]=i;
a2[i]=(char)(i+97);//將整型轉(zhuǎn)換為字符型
}
//下面各句打印各數(shù)組元素
System.out.println("\ta1\ta2\ta3\ta4\ta5");
System.out.println("\tdouble\tchar\tint\tbyte\tchar");
for(i=0;i<8;i++)
System.out.println("\t"+a1[i]+"\t"+a2[i]+"\t"+
a3[i]+"\t"+a4[i]+"\t"+a5[i]);
}}
運(yùn)行結(jié)果:
6.2.2數(shù)組下標(biāo)的靈活使用
【示例程序C6_2.java】用數(shù)組求解Fibonacci數(shù)列的前20項(xiàng),即使用數(shù)組下標(biāo)表達(dá)式求解數(shù)學(xué)上的迭代問題。
public
classC6_2{
public
static
voidmain(String[]args){
int
i;
int
f[]=new
int[20];//創(chuàng)建f數(shù)組,使其可存儲(chǔ)20個(gè)整型數(shù)據(jù)
f[0]=1;f[1]=1;
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];//數(shù)組元素的下標(biāo)使用循環(huán)變量
for(i=0;i<20;i++)
{if(i%5==0)System.out.println("\n");
System.out.print("\t"+f[i]);
}
}//main
}運(yùn)行結(jié)果:
二分查找的比較與下標(biāo)調(diào)整過程二分查找6880mid=()/2+85+mid=()/2lowHigh=數(shù)組名.length-1Low=mid+1high=mid-1數(shù)據(jù)為升序隊(duì)列
【示例程序C6_3.java】設(shè)數(shù)組中的數(shù)值是由小到大存放的,編寫二分查找程序。
classFindSearch
{intbinarySearch(int
arr[],int
searchValue)
{
int
low=0;//low是第一個(gè)數(shù)組元素的下標(biāo)
int
high=arr.length-1;//high是最后一個(gè)數(shù)組元素的下標(biāo)
int
mid=(low+high)/2;//mid是中間那個(gè)數(shù)組元素的下標(biāo)
while(low<=high&&arr[mid]!=searchValue)
{if(arr[mid]<searchValue)
low=mid+1;//要找的數(shù)可能在數(shù)組的后半部分中
else
high=mid-1;//要找的數(shù)可能在數(shù)組的前半部分中
mid=(low+high)/2;
}
if(low>high)mid=-1;
return
mid;//mid是數(shù)組元素下標(biāo),若為-1,則表示不存在要查的元素
}}public
classC6_3
{public
static
voidmain(String[]args)throwsIOException
{Scannersc=newScanner(System.in);//創(chuàng)建Scanner類對(duì)象sc
int
i,search,mid;Stringc1;
int
arr[]={2,4,7,18,25,34,56,68,89};
System.out.println("打印原始數(shù)據(jù)");
for(i=0;i<arr.length;i++)System.out.print(""+arr[i]);
System.out.println("\n");
System.out.println("請(qǐng)輸入要查找的整數(shù)");
c1=sc.next();//從鍵盤上讀取一個(gè)字符串賦給c1
search=Integer.parseInt(c1);//取出字符串轉(zhuǎn)換為整型數(shù)賦給search
FindSearchp1=newFindSearch();
mid=p1.binarySearch(arr,search);
if(mid==-1)System.out.println("沒找到!");
elseSystem.out.println("所查整數(shù)在數(shù)組中的位置下標(biāo)是:"+mid);
}}運(yùn)行結(jié)果:
arr247…89arr雙向地址傳遞6.2.3數(shù)組名之間的賦值
Java語言允許兩個(gè)類型相同但數(shù)組名不同(指向不同的對(duì)象)的數(shù)組相互賦值。賦值的結(jié)果是兩個(gè)類型相同的數(shù)組名指向同一數(shù)組對(duì)象。
【示例程序C6_4.java】編程實(shí)現(xiàn)兩個(gè)數(shù)組名之間的賦值。
public
classC6_4{
public
static
voidmain(Stringarg[])
{int
i;
int[]a1={2,5,8,25,36};
int
a3[]={90,3,9};
System.out.println("a1.length="+a1.length);
System.out.println("a3.length="+a3.length);
a3=a1;//賦值的結(jié)果是a3指向a1指向的數(shù)組,
//而a3先前指向的含有3個(gè)元素的數(shù)組由于沒有指向而消失
System.out.print("a1:");
for(i=0;i<a1.length;i++)
System.out.print(""+a1[i]);
System.out.println("\n");
System.out.println("a3.length="+a3.length);
System.out.print("a3:");
for(i=0;i<a3.length;i++)
System.out.print(""+a3[i]);
System.out.println("\n");
}
}運(yùn)行結(jié)果:
a12582536a390396.2.4向成員方法傳遞數(shù)組元素
向成員方法傳遞數(shù)組元素也就是用數(shù)組元素作為成員方法的實(shí)參,若數(shù)組元素的數(shù)據(jù)是基本數(shù)據(jù)類型,則數(shù)組元素作為成員方法的實(shí)參與用變量作為實(shí)參一樣,是單向值傳遞。即只能由數(shù)組元素傳遞給形參,程序中對(duì)形參的任何修改并不改變數(shù)組元素的值。
【示例程序C6_5.java】數(shù)組元素作為成員方法的實(shí)參(數(shù)據(jù)是基本數(shù)據(jù)類型),在成員方法中改變形參x和y的值,方法調(diào)用結(jié)束后實(shí)參數(shù)組元素的值沒有改變。
classFf
{intaa(int
x,int
y)//定義方法aa,有兩個(gè)整型形參x和y
{int
z;x=x+4;y=y+2;z=x*y;
return
z;
}
}
public
classC6_5
{public
static
voidmain(String[]args)
{
int
arr[]={6,8,9};//聲明并初始化數(shù)組arr
int
len=arr.length,k;Ffp1=newFf();
k=p1.aa(arr[0],arr[1]);//數(shù)組元素arr[0]和arr[1]作為方法aa的實(shí)參
System.out.println("k="+k);
for(int
i=0;i<len;i++)
System.out.print(""+arr[i]);//循環(huán)輸出數(shù)組元素的值
System.out.println("\n");
}}
運(yùn)行結(jié)果如下:k=100
6896.2.5向成員方法傳遞數(shù)組名
數(shù)組名作為成員方法的實(shí)參時(shí),是把實(shí)參數(shù)組對(duì)象的起始地址傳遞給形參數(shù)組名,即兩個(gè)數(shù)組名共同引用同一對(duì)象。這種參數(shù)的傳遞方式被稱為“雙向地址傳遞”。因此,在成員方法中對(duì)形參數(shù)組名指向的各元素值的修改,都會(huì)使實(shí)參數(shù)組名指向的各元素的值也發(fā)生同樣的變化。
【示例程序C6_6.java】兩個(gè)數(shù)組相加,將結(jié)果存入第二個(gè)數(shù)組中。
運(yùn)行結(jié)果:classAdd1Class
{voidadd(int
arA[],int
arB[])
{int
i;int
len=arA.length;
for(i=0;i<len;i++)arB[i]=arA[i]+arB[i];
}
}數(shù)組名用作實(shí)參的“雙向地址傳遞”public
classC6_6
{public
static
voidmain(String[]args)
{int
i;int
arX[]={1,3,7,6};
int
arY[]={78,0,42,5};int
len=arX.length;
Add1Classp1=newAdd1Class();
System.out.println("arX的原始數(shù)據(jù)");//打印X數(shù)組
for(i=0;i<len;i++)System.out.print(""+arX[i]);
System.out.println("\narY的原始數(shù)據(jù)");//打印Y數(shù)組
for(i=0;i<len;i++)System.out.print(""+arY[i]);
p1.add(arX,arY);//p1引用對(duì)象的add方法計(jì)算兩個(gè)數(shù)組之和
System.out.println("\n再次輸出arX");//再次打印X數(shù)組
for(i=0;i<len;i++)System.out.print(""+arX[i]);
System.out.println("\n再次輸出arY");//再次打印Y數(shù)組
for(i=0;i<len;i++)System.out.print(""+arY[i]);
System.out.println("\n");
}
}
【示例程序C6_7.java】有s1和s2兩個(gè)一維數(shù)組,s1數(shù)組中存放8名學(xué)生的成績,s2數(shù)組中存放5名學(xué)生的成績,分別求出這兩組學(xué)生的平均成績。
public
classC6_7
{static
doubleaverage(double
ascore[])
{double
aaver=0;
for(int
i=0;i<ascore.length;i++)aaver=aaver+ascore[i];
aaver=aaver/ascore.length;
return
aaver;
}
ascores1905686.5879967.565807090879967s2
public
static
voidmain(Stringarg[])
{double
aver1,aver2;
double
s1[]={90,56,86.5,87,99,67.5,65,80};
double
s2[]={70,90,87,99,67};
System.out.println("s1.length="+s1.length);
aver1=average(s1);//數(shù)組名s1作為average成員方法的實(shí)參
System.out.println("aver1="+aver1);
System.out.println("s2.length="+s2.length);
aver2=average(s2);//數(shù)組名s2作為average成員方法的實(shí)參
System.out.println("aver2="+aver2);
}
}
運(yùn)行結(jié)果:程序中,盡管兩個(gè)數(shù)組對(duì)象的長度不同(分別為8和5),但其數(shù)據(jù)類型相同,因此,可以作為同一個(gè)成員方法(計(jì)算平均成績)的實(shí)參。6.2.6數(shù)組元素排序
1.冒泡排序
冒泡排序是從后向前對(duì)相鄰的兩個(gè)數(shù)組元素進(jìn)行比較,若后面元素的值小于前面元素的值,則讓這兩個(gè)元素交換位置;否則,不進(jìn)行交換。依次進(jìn)行下去,第一趟排序可將數(shù)組中值最小的元素移至下標(biāo)為0的位置。對(duì)于有n個(gè)元素的數(shù)組,循環(huán)執(zhí)行n-1趟掃描便可完成排序。當(dāng)然,也可以從前向后對(duì)相鄰的兩個(gè)數(shù)組元素進(jìn)行比較,但此時(shí)是將大數(shù)向后移。與小者前移的冒泡法相對(duì)應(yīng),可將這種大者后移的排序稱為下沉法。
冒泡排序
用冒泡法對(duì)6個(gè)數(shù)據(jù)進(jìn)行排序的兩趟掃描中比較與交換的過程運(yùn)行結(jié)果:
【示例程序C6_8.java】用冒泡法對(duì)8個(gè)數(shù)從小到大進(jìn)行排序。
importjava.util.Scanner;
classSortClass//類定義開始
{
voidsort(int
arr[])//開始定義冒泡排序方法sort
{
int
i,k,temp;
int
len=arr.length;
for(i=0;i<len-1;i++)
for(k=len-1;k>i;k--)
if(arr[k]<arr[k-1])
{
temp=arr[k-1];arr[k-1]=arr[k];arr[k]=temp;
}//if塊結(jié)束,同時(shí)使內(nèi)循環(huán)for(k…)和外循環(huán)for(i…)結(jié)束
}//sort方法結(jié)束
}//類SortClass定義結(jié)束public
classC6_8
{public
static
voidmain(String[]args)throwsIOException
{//Scanner類是一個(gè)簡單的文本掃描器類,可以從鍵盤讀入數(shù)據(jù)
Scannersc=newScanner(System.in);//創(chuàng)建Scanner類對(duì)象sc
int
i;Stringc1;int
arr[]=new
int[8];
int
len=arr.length;
System.out.println("請(qǐng)從鍵盤輸入8個(gè)整數(shù),一行只輸入一個(gè)數(shù)"
);
for(i=0;i<len;i++)
{c1=sc.next();//從鍵盤上讀取一個(gè)字符串賦給c1
arr[i]=Integer.parseInt(c1);//將字符串類型c1轉(zhuǎn)換成整數(shù)類型
}
System.out.print("原始數(shù)據(jù):");
for(i=0;i<len;i++)System.out.print(""+arr[i]);//打印原始數(shù)據(jù)
System.out.println("\n");SortClassp1=newSortClass();
p1.sort(arr);//實(shí)參為數(shù)組名
System.out.println("冒泡法排序的結(jié)果:");
for(i=0;i<len;i++)System.out.print(""+arr[i]);
System.out.println("\n");}}
2.選擇法排序
它的基本思想是首先從待排序的n個(gè)數(shù)中找出最小的一個(gè)與arr1[0]?對(duì)換;再將arr1[1]?到arr1[n]?中的最小數(shù)與arr1[1]?對(duì)換,依此類推。每比較一輪,找出待排序數(shù)中最小的一個(gè)數(shù)進(jìn)行交換,共進(jìn)行n?-?1次交換便可完成排序。選擇法排序的交換過程i=0j=1k=0k=1j=2k=2j=3j=4k=4j=5j=6j=7i=1k=1j=2j=7k=7
【示例程序C6_9.java】選擇法排序。
classSelectSort
{static
voidsort(int
arr1[])//成員方法的形參是數(shù)組
{int
i,j,k,t;int
len=arr1.length;
for(i=0;i<len-1;i++)//外循環(huán)開始
{k=i;
for(j=i+1;j<len;j++)
if(arr1[j]<arr1[k])k=j;//內(nèi)循環(huán)只用k記錄最小值的下標(biāo)
if(k>i)
{t=arr1[i];//在外循環(huán)實(shí)施交換,可減少交換次數(shù)
arr1[i]=arr1[k];arr1[k]=t;
}//if(k>i)結(jié)束
}//外循環(huán)for(i…)結(jié)束
}//成員方法sort定義畢
}public
classC6_9extendsSelectSort
{public
static
voidmain(String[]args)
{int
arr[]={78,70,2,5,-98,7,10,-1};
int
len=arr.length;
SelectSort.sort(arr);//數(shù)組名作為成員方法的實(shí)參
System.out.print("選擇法排序的結(jié)果:");
System.out.println("length="+arr.length);
//數(shù)組arr的值已在方法調(diào)用中被改變了
for(int
i=0;i<len;i++)
System.out.print(""+arr[i]);
System.out.println("\n");
}
}
運(yùn)行結(jié)果:
選擇法排序的結(jié)果:-98-12571070786.2.7對(duì)象數(shù)組
學(xué)生成績表這種數(shù)據(jù)結(jié)構(gòu)在過去的結(jié)構(gòu)化程序設(shè)計(jì)中被稱為記錄或結(jié)構(gòu)體,而在面向?qū)ο蟮某绦蛟O(shè)計(jì)中把每一個(gè)學(xué)生看做一個(gè)對(duì)象。學(xué)生成績表就是由多個(gè)對(duì)象組成的。學(xué)?生?成?績?表
如果一個(gè)類有若干個(gè)對(duì)象,可以把這一系列具有相同類型的對(duì)象用一個(gè)數(shù)組來存放。這種數(shù)組稱為對(duì)象數(shù)組。數(shù)組名的值是第一個(gè)元素的首地址。每一個(gè)元素的值是引用對(duì)象的首地址。
【示例程序C6_10.java】設(shè)有若干名學(xué)生,每個(gè)學(xué)生有姓名、性別和成績?nèi)齻€(gè)屬性,要求將每個(gè)學(xué)生作為一個(gè)對(duì)象,建立獲取對(duì)象名字的成員方法getName和獲取對(duì)象性別的成員方法getSex,以及輸出對(duì)象的全部數(shù)據(jù)成員的成員方法studPrint。classStudent
{privateStringname;private
char
sex;
private
double
score;
Student(Stringcname,char
csex,double
cscore)
{name=cname;sex=csex;
score=cscore;
}
StringgetName(){return
name;}
chargetSex(){return
sex;}
voidstudPrint(){
System.out.println("Name:"+name+
"\tSex:"+sex+"\tScore:"+score);
}
}
public
classC6_10
{public
static
voidmain(String[]args)
{Stringmname;char
msex;int
len;
//聲明對(duì)象數(shù)組,用new為每一個(gè)對(duì)象分配存儲(chǔ)空間
Student[]st1=newStudent[3];
st1[0]=newStudent("li",'F',89);
st1[1]=newStudent("he",'M',90);
st1[2]=newStudent("zhang",'M',78);len=3;
//對(duì)象數(shù)組元素的引用
for(int
i=0;i<len;i++)st1[i].studPrint();
mname=st1[1].getName();msex=st1[1].getSex();
System.out.println("Name1:"+mname+"\tSex:"+msex);
}
}運(yùn)行結(jié)果:對(duì)象數(shù)組st1的內(nèi)存分配
6.3二維數(shù)組
許多數(shù)據(jù),從邏輯上看是由若干行、若干列組成的。例如,矩陣、行列式、二維表格等。為適應(yīng)存放這樣一類數(shù)據(jù),人們?cè)O(shè)計(jì)出了一種如圖所示的數(shù)據(jù)結(jié)構(gòu)——二維數(shù)組。矩陣二維數(shù)組Java中只有一維數(shù)組,不存在稱為“二維數(shù)組”的明確結(jié)構(gòu)。二維數(shù)組實(shí)際上看成是其每個(gè)數(shù)組元素是一個(gè)一維數(shù)組的一維數(shù)組。
二維數(shù)組在Java中的實(shí)現(xiàn)6.3.1二維數(shù)組的聲明
聲明二維數(shù)組格式如下:
類型說明符數(shù)組名[][];或類型說明符[][]數(shù)組名;
例如,聲明數(shù)組名為arr二維整型數(shù)組:
intarr[][];或
int[][]arr;
其中:類型說明符可以是Java的基本類型和引用類型;數(shù)組名遵循標(biāo)識(shí)符命名規(guī)則給出的一個(gè)標(biāo)識(shí)符。
注意:聲明二維數(shù)組時(shí),系統(tǒng)只為二維數(shù)組對(duì)象的引用變量在內(nèi)存的變量存儲(chǔ)區(qū)中分配存儲(chǔ)空間,但并未創(chuàng)建具體的數(shù)組對(duì)象,所以,這個(gè)變量的值為null。
行列6.3.2創(chuàng)建二維數(shù)組對(duì)象
創(chuàng)建二維數(shù)組對(duì)象主要包括三個(gè)方面:
(1)為數(shù)組對(duì)象在對(duì)象存儲(chǔ)區(qū)中分配存儲(chǔ)空間;
(2)對(duì)數(shù)組對(duì)象進(jìn)行初始化;
(3)將新創(chuàng)建的數(shù)組對(duì)象與已聲明的引用數(shù)組對(duì)象的變量(即數(shù)組名)關(guān)聯(lián)起來。
二維數(shù)組對(duì)象的創(chuàng)建可以通過直接指定數(shù)組元素初始值的方式完成,也可以用new操作符完成。
1.用new操作符創(chuàng)建二維數(shù)組對(duì)象
用new操作符來創(chuàng)建數(shù)組對(duì)象,并根據(jù)Java提供的數(shù)據(jù)成員默認(rèn)初始化原則,對(duì)數(shù)組元素賦初值。用new操作符創(chuàng)建數(shù)組對(duì)象有兩種方式:
(1)先聲明數(shù)組,再創(chuàng)建數(shù)組對(duì)象。在數(shù)組已經(jīng)聲明以后,可用下述兩種格式中的任意一種來初始化二維數(shù)組。
數(shù)組名=new類型說明符[數(shù)組長度][];
或
數(shù)組名=new類型說明符[數(shù)組長度][數(shù)組長度];行列其中,對(duì)數(shù)組名、類型說明符和數(shù)組長度的要求與一維數(shù)組一致。
例如:intarra[][];//聲明二維數(shù)組
arra=newint[3][4];/*創(chuàng)建二維數(shù)組對(duì)象,初始化二維數(shù)組*/
上述兩條語句聲明并創(chuàng)建了一個(gè)3行4列的arra數(shù)組。也就是說arra數(shù)組有3個(gè)元素,而每一個(gè)元素又都是長度為4的一維數(shù)組,實(shí)際上共有12個(gè)元素。
arra=newint[3][4];相當(dāng)于下述4條語句:
arra=newint[3][?]; //創(chuàng)建一個(gè)有3個(gè)元素的數(shù)組,且每個(gè)元素也是一個(gè)數(shù)組
arra[0]=newint[4]; //創(chuàng)建arra[0]元素的數(shù)組,它有4個(gè)元素
arra[1]=newint[4]; //創(chuàng)建arra[1]元素的數(shù)組,它有4個(gè)元素
arra[2]=newint[4]; //創(chuàng)建arra[2]元素的數(shù)組,它有4個(gè)元素
也等價(jià)于:
arra=newint[3][?];
for(inti=0;i<3;i++){arra[i]=newint[4];}
在初始化二維數(shù)組時(shí)也可以只指定數(shù)組的行數(shù)而不給出數(shù)組的列數(shù),每一行的長度由二維數(shù)組引用時(shí)決定。但是,不能只指定列數(shù)而不指定行數(shù)。
(2)在聲明數(shù)組時(shí)創(chuàng)建數(shù)組對(duì)象。其格式如下:
類型說明符[][]數(shù)組名=new類型說明符[數(shù)組長度][?];
或
類型說明符數(shù)組名[][]=new類型說明符[數(shù)組長度][數(shù)組長度];
例如:
int[][]arr=newint[4][];
intarr[][]=newint[4][3];
不指定行數(shù)而指定列數(shù)是錯(cuò)誤的。
例如:int[][]arr=newint[?][4];行列
2.直接指定初值的方式創(chuàng)建二維數(shù)組對(duì)象
用直接指定初值的方式創(chuàng)建二維數(shù)組對(duì)象,是在數(shù)組聲明的同時(shí)創(chuàng)建數(shù)組對(duì)象。將數(shù)組元素的初值依次寫入賦值號(hào)后的一對(duì)花括號(hào)內(nèi)的花括號(hào)內(nèi)。例如:
int[][]arr1={{3,-9,6},{8,0,1},{11,9,8}};
聲明并創(chuàng)建了二維數(shù)組對(duì)象,arr1數(shù)組有3個(gè)元素,每個(gè)元素又都是有3個(gè)元素的一維數(shù)組。
用指定初值的方式創(chuàng)建數(shù)組對(duì)象時(shí),各子數(shù)組元素的個(gè)數(shù)可以不同。例如:
int[][]arr1={{3,-9},{8,0,1},{10,11,9,8}};等價(jià)于:int[][]arr1=newint[3][?];intarr1[0]={3,-9};intarr1[1]={8,0,1};intarr1[2]={10,11,9,8};
6.4二維數(shù)組的引用
6.4.1測定數(shù)組的長度及數(shù)組賦值
“數(shù)組名.length”的形式測定的是二維數(shù)組的行數(shù),使用“數(shù)組名[i].length”的形式測定的是該行的列數(shù)。
例如,若有如下的初始化語句:
int[][]arr1={{3,-9},{8,0,1},{10,11,9,8}};
則arr1.length的返回值是3,表示arr1數(shù)組有3行或3個(gè)一維數(shù)組元素。而arr1[2].length的返回值是4,表示arr1[2]的長度為4。
【示例程序C6_11.java】在程序中測定數(shù)組的長度。
public
classC6_11
{public
static
voidmain(Stringarg[])
{
int
i,j;
int
len1[]=new
int[2];
int
len2[]=new
int[2];
int[][]a1={{1,4,8,9},{3,2,2}};
int
a2[][]={{90,3},{9,12}};
System.out.println("a1.length="+a1.length);
for(i=0;i<2;i++)
{len1[i]=a1[i].length;//將a1數(shù)組的元素i的長度賦給len1[i]
System.out.println("a1[].length="+len1[i]);
}
for(i=0;i<2;i++)
{for(j=0;j<len1[i];j++)System.out.print(""+a1[i][j]);
System.out.println("\n");
}
System.out.println("a2.length="+a2.length);
for(i=0;i<2;i++)
{len2[i]=a2[i].length;//將a2數(shù)組的元素i的長度賦給len2[i]
System.out.println("a2[].length="+len2[i]);
}
//打印a2數(shù)組對(duì)象的值
for(i=0;i<2;i++)
{for(j=0;j<len2[i];j++)System.out.print(""+a2[i][j]);
System.out.println("\n");
}
a2=a1;//將a1數(shù)組賦給a2,說明a2指向a1指向的數(shù)組對(duì)象
System.out.println("a1.length="+a1.length);
for(i=0;i<2;i++)
{len1[i]=a1[i].length;//將a1數(shù)組的元素i的長度賦給len1[i]
System.out.println("a1[].length="+len1[i]);
}
//打印a1數(shù)組的對(duì)象的值
for(i=0;i<2;i++)
{for(j=0;j<len1[i];j++)System.out.print(""+a1[i][j]);
System.out.println("\n");
}
System.out.println("a2.length="+a2.length);
for(i=0;i<2;i++)
{len2[i]=a2[i].length;//將a2數(shù)組的元素i的長度賦給len2[i]
System.out.println("a2[].length="+len2[i]);
}
//打印a2數(shù)組的對(duì)象的值
for(i=0;i<2;i++)
{for(j=0;j<len2[i];j++)System.out.print(""+a2[i][j]);
System.out.println("\n");
}
System.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度地質(zhì)災(zāi)害防治安全承包合同范本2篇
- 2025年度老舊廠房拆除重建項(xiàng)目轉(zhuǎn)讓合同3篇
- 二零二五版UPS不間斷電源系統(tǒng)在數(shù)據(jù)中心節(jié)能改造中的應(yīng)用合同3篇
- 二零二五年度食品安全樣本檢驗(yàn)合同2篇
- 2025年度物業(yè)管理委托合同(住宅小區(qū))3篇
- 三方監(jiān)理服務(wù)協(xié)議:2024年度工程監(jiān)管協(xié)議版B版
- 二零二五版公司銷售業(yè)務(wù)員合同協(xié)議書含虛擬貨幣交易業(yè)務(wù)合作3篇
- 2024年轎車物流服務(wù)協(xié)議模板版B版
- 2024煙花爆竹行業(yè)信用風(fēng)險(xiǎn)防范購銷合同管理3篇
- 二零二五版廠房轉(zhuǎn)租及物業(yè)管理合同6篇
- 2025年山東光明電力服務(wù)公司招聘筆試參考題庫含答案解析
- 《神經(jīng)發(fā)展障礙 兒童社交溝通障礙康復(fù)規(guī)范》
- 詩詞接龍(飛花令)PPT
- 子宮內(nèi)膜癌(課堂PPT)
- 澳大利亞公司法1-30
- 海上試油測試技術(shù)0327
- 中國地圖標(biāo)準(zhǔn)版(可編輯顏色)
- 瑪氏銷售常用術(shù)語中英對(duì)照
- (完整)貓咪上門喂養(yǎng)服務(wù)協(xié)議書
- 上海牛津版三年級(jí)英語3B期末試卷及答案(共5頁)
- 行為疼痛量表BPS
評(píng)論
0/150
提交評(píng)論