面向對象程序設計-Java(第四版)課件 第6章 數(shù)組_第1頁
面向對象程序設計-Java(第四版)課件 第6章 數(shù)組_第2頁
面向對象程序設計-Java(第四版)課件 第6章 數(shù)組_第3頁
面向對象程序設計-Java(第四版)課件 第6章 數(shù)組_第4頁
面向對象程序設計-Java(第四版)課件 第6章 數(shù)組_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章數(shù)組6.1一維數(shù)組6.2一維數(shù)組引用舉例6.3二維數(shù)組6.4二維數(shù)組的引用求30名學生的成績的平均成績。

(1)用變量實現(xiàn)

doubleg1,g2,…,g30,sum,average;

g1=80;g2=85.2;…;g30=78;

sum=g1+g2+….+g30;

average=sum/30.0;

(2)用數(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ù)組是一個對象(object),屬于引用類型,它由一系列具有相同類型的帶序號的元素組成。這些元素的序號從0開始編排,并且通過下標操作符[?]中的數(shù)字引用它們。

(2)數(shù)組中的每個元素相當于該對象的數(shù)據(jù)成員變量,數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型。

(3)根據(jù)數(shù)組中下標的個數(shù)(或方括號的對數(shù))可將數(shù)組區(qū)分為只有一對方括號的一維數(shù)組和有兩對方括號的二維數(shù)組。

只有一個下標的數(shù)組稱為一維數(shù)組,它是數(shù)組的基本形式。建立一維數(shù)組通常包括聲明數(shù)組、創(chuàng)建數(shù)組對象和初始化數(shù)組三步。6.1.1一維數(shù)組的聲明

一維數(shù)組的聲明格式如下:類型標識符數(shù)組名[];

或類型標識符[]數(shù)組名;

說明:

(1)類型標識符:是指數(shù)組元素的數(shù)據(jù)類型,它可以是Java的基本類型和引用類型。

(2)數(shù)組名:是數(shù)組對象的引用變量名,這個名稱應遵從Java標識符定義規(guī)則。

(3)數(shù)組的維數(shù):數(shù)組的維數(shù)是用方括號“[]”的個數(shù)來確定的。對于一維數(shù)組來說,只需要一對方括號。

例如:intabc[?];//聲明名為abc的一維整型數(shù)組

double[?]example2;/*聲明名為example2

的雙精度型一維數(shù)組*/注意:聲明一維數(shù)組時,系統(tǒng)只為數(shù)組對象的引用變量在內存的變量存儲區(qū)中分配存儲空間,但并未創(chuàng)建具體的數(shù)組對象,所以,這個變量的值為null。數(shù)組名的內存分配6.1.2創(chuàng)建一維數(shù)組對象

創(chuàng)建一維數(shù)組對象主要包括三個方面:

(1)為數(shù)組對象在對象存儲區(qū)中分配存儲空間;

(2)對數(shù)組對象進行初始化;

(3)將新創(chuàng)建的數(shù)組對象與已聲明的引用數(shù)組對象的變量(即數(shù)組名)關聯(lián)起來。

一維數(shù)組對象的創(chuàng)建可以通過直接指定數(shù)組元素初始值的方式完成,也可以用new操作符完成。

1.直接指定初值的方式創(chuàng)建數(shù)組對象

例如:int[]a1={23,–9,38,8,65};

數(shù)組元素的初值依次寫入賦值號后的一對花括號內,各個元素值間用逗號分隔,給這個數(shù)組的所有元素賦上初始值;初始值的個數(shù)也就確定了數(shù)組的長度。

這條語句聲明數(shù)組名為a1(a1也稱為引用數(shù)組對象的變量名,);數(shù)組元素的數(shù)據(jù)類型為整型(int,占4個字節(jié)),共有5個初始值,故數(shù)組元素的個數(shù)為5。

例如:int[]a1={23,–9,38,8,65};

該語句為Java分配存儲空間提供了所需要的全部信息,系統(tǒng)可為這個數(shù)組對象分配5*4=20個字節(jié)的連續(xù)存儲空間。a1數(shù)組的值是a1關聯(lián)的數(shù)組對象的首地址,如圖所示。a1關聯(lián)對象示意圖數(shù)組對象的元素由a1[?]?引用,經(jīng)過初始化后,使a1[0]?=?23,a1[1]?=?-9,a1[2]?=?38,a1[3]?=?8,a1[4]?=?65,如圖6.3所示。

注意:Java中的數(shù)組元素下標從0開始。a1數(shù)組的初始化

2.用關鍵字new創(chuàng)建數(shù)組對象

用關鍵字new創(chuàng)建數(shù)組對象,并按照Java提供的數(shù)據(jù)成員默認初始化原則對數(shù)組元素賦初值。用關鍵字new來創(chuàng)建數(shù)組對象有兩種方式。

(1)先聲明數(shù)組,再創(chuàng)建數(shù)組對象。這實際上由兩條語句構成,格式如下:

類型標識符數(shù)組名[];

數(shù)組名=new類型標識符[數(shù)組長度];

其中,第一條語句是數(shù)組的聲明語句;第二條語句是創(chuàng)建數(shù)組對象,并初始化。

注意:兩條語句中的數(shù)組名、類型標識符必須一致。數(shù)組長度通常是整型常量,用以指明數(shù)組元素的個數(shù)。

例如:inta[];

a=newint[9];

定義a數(shù)組對象有9個元素,并按照Java提供的數(shù)據(jù)成員默認初始化原則進行初始化,如圖所示。用new創(chuàng)建數(shù)組對象并初始化

(2)在聲明數(shù)組的同時用new關鍵字創(chuàng)建數(shù)組對象,并初始化。這種初始化實際上是將上面所述的兩條語句合并為一條語句。其格式如下:

類型標識符數(shù)組名[]=new類型標識符[數(shù)組長度];

類型標識符[]數(shù)組名=new類型標識符[數(shù)組長度];

例如:int[]a=newint[10];

或inta[]=newint[10];

6.1.3一維數(shù)組的引用

一維數(shù)組元素的引用格式如下:數(shù)組名[數(shù)組下標]

其中,數(shù)組名是與數(shù)組對象關聯(lián)的引用變量;數(shù)組下標是指元素在數(shù)組中的位置,數(shù)組下標的取值范圍是0~(數(shù)組長度–1),下標值可以是整數(shù)型常量或整數(shù)型變量表達式。

例如,int[?]a=newint[10];

a[3]=25;(合法)a[3+6]=90;(合法)

a[10]=8;(錯誤)

下標從0開始到9正好10個元素,不存在下標為10的數(shù)組元素a[10]。

6.2一維數(shù)組引用舉例

6.2.1測定數(shù)組的長度

在Java語言中,數(shù)組也是一種對象。數(shù)組經(jīng)初始化后就確定了它的長度(數(shù)組元素的個數(shù)),Java用一個數(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ù)組元素個數(shù)為8,類型double型

a2=new

char[8];//創(chuàng)建a2數(shù)組,數(shù)組元素個數(shù)為8,類型char型

int

a3[]=new

int[8];//創(chuàng)建a3數(shù)組,數(shù)組元素個數(shù)為8,類型int型

byte[]a4=new

byte[8];//創(chuàng)建a4數(shù)組,數(shù)組元素個數(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ù)組中的每一個元素,為各元素賦值

for(i=0;i<8;i++)

{a1[i]=100.0+i;a3[i]=i;

a2[i]=(char)(i+97);//將整型轉換為字符型

}

//下面各句打印各數(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]);

}}

運行結果:

6.2.2數(shù)組下標的靈活使用

【示例程序C6_2.java】用數(shù)組求解Fibonacci數(shù)列的前20項,即使用數(shù)組下標表達式求解數(shù)學上的迭代問題。

public

classC6_2{

public

static

voidmain(String[]args){

int

i;

int

f[]=new

int[20];//創(chuàng)建f數(shù)組,使其可存儲20個整型數(shù)據(jù)

f[0]=1;f[1]=1;

for(i=2;i<20;i++)

f[i]=f[i-2]+f[i-1];//數(shù)組元素的下標使用循環(huán)變量

for(i=0;i<20;i++)

{if(i%5==0)System.out.println("\n");

System.out.print("\t"+f[i]);

}

}//main

}運行結果:

二分查找的比較與下標調整過程二分查找6880mid=()/2+85+mid=()/2lowHigh=數(shù)組名.length-1Low=mid+1high=mid-1數(shù)據(jù)為升序隊列

【示例程序C6_3.java】設數(shù)組中的數(shù)值是由小到大存放的,編寫二分查找程序。

classFindSearch

{intbinarySearch(int

arr[],int

searchValue)

{

int

low=0;//low是第一個數(shù)組元素的下標

int

high=arr.length-1;//high是最后一個數(shù)組元素的下標

int

mid=(low+high)/2;//mid是中間那個數(shù)組元素的下標

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ù)組元素下標,若為-1,則表示不存在要查的元素

}}public

classC6_3

{public

static

voidmain(String[]args)throwsIOException

{Scannersc=newScanner(System.in);//創(chuàng)建Scanner類對象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("請輸入要查找的整數(shù)");

c1=sc.next();//從鍵盤上讀取一個字符串賦給c1

search=Integer.parseInt(c1);//取出字符串轉換為整型數(shù)賦給search

FindSearchp1=newFindSearch();

mid=p1.binarySearch(arr,search);

if(mid==-1)System.out.println("沒找到!");

elseSystem.out.println("所查整數(shù)在數(shù)組中的位置下標是:"+mid);

}}運行結果:

arr247…89arr雙向地址傳遞6.2.3數(shù)組名之間的賦值

Java語言允許兩個類型相同但數(shù)組名不同(指向不同的對象)的數(shù)組相互賦值。賦值的結果是兩個類型相同的數(shù)組名指向同一數(shù)組對象。

【示例程序C6_4.java】編程實現(xiàn)兩個數(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;//賦值的結果是a3指向a1指向的數(shù)組,

//而a3先前指向的含有3個元素的數(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");

}

}運行結果:

a12582536a390396.2.4向成員方法傳遞數(shù)組元素

向成員方法傳遞數(shù)組元素也就是用數(shù)組元素作為成員方法的實參,若數(shù)組元素的數(shù)據(jù)是基本數(shù)據(jù)類型,則數(shù)組元素作為成員方法的實參與用變量作為實參一樣,是單向值傳遞。即只能由數(shù)組元素傳遞給形參,程序中對形參的任何修改并不改變數(shù)組元素的值。

【示例程序C6_5.java】數(shù)組元素作為成員方法的實參(數(shù)據(jù)是基本數(shù)據(jù)類型),在成員方法中改變形參x和y的值,方法調用結束后實參數(shù)組元素的值沒有改變。

classFf

{intaa(int

x,int

y)//定義方法aa,有兩個整型形參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的實參

System.out.println("k="+k);

for(int

i=0;i<len;i++)

System.out.print(""+arr[i]);//循環(huán)輸出數(shù)組元素的值

System.out.println("\n");

}}

運行結果如下:k=100

6896.2.5向成員方法傳遞數(shù)組名

數(shù)組名作為成員方法的實參時,是把實參數(shù)組對象的起始地址傳遞給形參數(shù)組名,即兩個數(shù)組名共同引用同一對象。這種參數(shù)的傳遞方式被稱為“雙向地址傳遞”。因此,在成員方法中對形參數(shù)組名指向的各元素值的修改,都會使實參數(shù)組名指向的各元素的值也發(fā)生同樣的變化。

【示例程序C6_6.java】兩個數(shù)組相加,將結果存入第二個數(shù)組中。

運行結果: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ù)組名用作實參的“雙向地址傳遞”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引用對象的add方法計算兩個數(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兩個一維數(shù)組,s1數(shù)組中存放8名學生的成績,s2數(shù)組中存放5名學生的成績,分別求出這兩組學生的平均成績。

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成員方法的實參

System.out.println("aver1="+aver1);

System.out.println("s2.length="+s2.length);

aver2=average(s2);//數(shù)組名s2作為average成員方法的實參

System.out.println("aver2="+aver2);

}

}

運行結果:程序中,盡管兩個數(shù)組對象的長度不同(分別為8和5),但其數(shù)據(jù)類型相同,因此,可以作為同一個成員方法(計算平均成績)的實參。6.2.6數(shù)組元素排序

1.冒泡排序

冒泡排序是從后向前對相鄰的兩個數(shù)組元素進行比較,若后面元素的值小于前面元素的值,則讓這兩個元素交換位置;否則,不進行交換。依次進行下去,第一趟排序可將數(shù)組中值最小的元素移至下標為0的位置。對于有n個元素的數(shù)組,循環(huán)執(zhí)行n-1趟掃描便可完成排序。當然,也可以從前向后對相鄰的兩個數(shù)組元素進行比較,但此時是將大數(shù)向后移。與小者前移的冒泡法相對應,可將這種大者后移的排序稱為下沉法。

冒泡排序

用冒泡法對6個數(shù)據(jù)進行排序的兩趟掃描中比較與交換的過程運行結果:

【示例程序C6_8.java】用冒泡法對8個數(shù)從小到大進行排序。

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塊結束,同時使內循環(huán)for(k…)和外循環(huán)for(i…)結束

}//sort方法結束

}//類SortClass定義結束public

classC6_8

{public

static

voidmain(String[]args)throwsIOException

{//Scanner類是一個簡單的文本掃描器類,可以從鍵盤讀入數(shù)據(jù)

Scannersc=newScanner(System.in);//創(chuàng)建Scanner類對象sc

int

i;Stringc1;int

arr[]=new

int[8];

int

len=arr.length;

System.out.println("請從鍵盤輸入8個整數(shù),一行只輸入一個數(shù)"

);

for(i=0;i<len;i++)

{c1=sc.next();//從鍵盤上讀取一個字符串賦給c1

arr[i]=Integer.parseInt(c1);//將字符串類型c1轉換成整數(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ù)組名

System.out.println("冒泡法排序的結果:");

for(i=0;i<len;i++)System.out.print(""+arr[i]);

System.out.println("\n");}}

2.選擇法排序

它的基本思想是首先從待排序的n個數(shù)中找出最小的一個與arr1[0]?對換;再將arr1[1]?到arr1[n]?中的最小數(shù)與arr1[1]?對換,依此類推。每比較一輪,找出待排序數(shù)中最小的一個數(shù)進行交換,共進行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;//內循環(huán)只用k記錄最小值的下標

if(k>i)

{t=arr1[i];//在外循環(huán)實施交換,可減少交換次數(shù)

arr1[i]=arr1[k];arr1[k]=t;

}//if(k>i)結束

}//外循環(huán)for(i…)結束

}//成員方法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ù)組名作為成員方法的實參

System.out.print("選擇法排序的結果:");

System.out.println("length="+arr.length);

//數(shù)組arr的值已在方法調用中被改變了

for(int

i=0;i<len;i++)

System.out.print(""+arr[i]);

System.out.println("\n");

}

}

運行結果:

選擇法排序的結果:-98-12571070786.2.7對象數(shù)組

學生成績表這種數(shù)據(jù)結構在過去的結構化程序設計中被稱為記錄或結構體,而在面向對象的程序設計中把每一個學生看做一個對象。學生成績表就是由多個對象組成的。學?生?成?績?表

如果一個類有若干個對象,可以把這一系列具有相同類型的對象用一個數(shù)組來存放。這種數(shù)組稱為對象數(shù)組。數(shù)組名的值是第一個元素的首地址。每一個元素的值是引用對象的首地址。

【示例程序C6_10.java】設有若干名學生,每個學生有姓名、性別和成績三個屬性,要求將每個學生作為一個對象,建立獲取對象名字的成員方法getName和獲取對象性別的成員方法getSex,以及輸出對象的全部數(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;

//聲明對象數(shù)組,用new為每一個對象分配存儲空間

Student[]st1=newStudent[3];

st1[0]=newStudent("li",'F',89);

st1[1]=newStudent("he",'M',90);

st1[2]=newStudent("zhang",'M',78);len=3;

//對象數(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);

}

}運行結果:對象數(shù)組st1的內存分配

6.3二維數(shù)組

許多數(shù)據(jù),從邏輯上看是由若干行、若干列組成的。例如,矩陣、行列式、二維表格等。為適應存放這樣一類數(shù)據(jù),人們設計出了一種如圖所示的數(shù)據(jù)結構——二維數(shù)組。矩陣二維數(shù)組Java中只有一維數(shù)組,不存在稱為“二維數(shù)組”的明確結構。二維數(shù)組實際上看成是其每個數(shù)組元素是一個一維數(shù)組的一維數(shù)組。

二維數(shù)組在Java中的實現(xiàn)6.3.1二維數(shù)組的聲明

聲明二維數(shù)組格式如下:

類型說明符數(shù)組名[][];或類型說明符[][]數(shù)組名;

例如,聲明數(shù)組名為arr二維整型數(shù)組:

intarr[][];或

int[][]arr;

其中:類型說明符可以是Java的基本類型和引用類型;數(shù)組名遵循標識符命名規(guī)則給出的一個標識符。

注意:聲明二維數(shù)組時,系統(tǒng)只為二維數(shù)組對象的引用變量在內存的變量存儲區(qū)中分配存儲空間,但并未創(chuàng)建具體的數(shù)組對象,所以,這個變量的值為null。

行列6.3.2創(chuàng)建二維數(shù)組對象

創(chuàng)建二維數(shù)組對象主要包括三個方面:

(1)為數(shù)組對象在對象存儲區(qū)中分配存儲空間;

(2)對數(shù)組對象進行初始化;

(3)將新創(chuàng)建的數(shù)組對象與已聲明的引用數(shù)組對象的變量(即數(shù)組名)關聯(lián)起來。

二維數(shù)組對象的創(chuàng)建可以通過直接指定數(shù)組元素初始值的方式完成,也可以用new操作符完成。

1.用new操作符創(chuàng)建二維數(shù)組對象

用new操作符來創(chuàng)建數(shù)組對象,并根據(jù)Java提供的數(shù)據(jù)成員默認初始化原則,對數(shù)組元素賦初值。用new操作符創(chuàng)建數(shù)組對象有兩種方式:

(1)先聲明數(shù)組,再創(chuàng)建數(shù)組對象。在數(shù)組已經(jīng)聲明以后,可用下述兩種格式中的任意一種來初始化二維數(shù)組。

數(shù)組名=new類型說明符[數(shù)組長度][];

數(shù)組名=new類型說明符[數(shù)組長度][數(shù)組長度];行列其中,對數(shù)組名、類型說明符和數(shù)組長度的要求與一維數(shù)組一致。

例如:intarra[][];//聲明二維數(shù)組

arra=newint[3][4];/*創(chuàng)建二維數(shù)組對象,初始化二維數(shù)組*/

上述兩條語句聲明并創(chuàng)建了一個3行4列的arra數(shù)組。也就是說arra數(shù)組有3個元素,而每一個元素又都是長度為4的一維數(shù)組,實際上共有12個元素。

arra=newint[3][4];相當于下述4條語句:

arra=newint[3][?]; //創(chuàng)建一個有3個元素的數(shù)組,且每個元素也是一個數(shù)組

arra[0]=newint[4]; //創(chuàng)建arra[0]元素的數(shù)組,它有4個元素

arra[1]=newint[4]; //創(chuàng)建arra[1]元素的數(shù)組,它有4個元素

arra[2]=newint[4]; //創(chuàng)建arra[2]元素的數(shù)組,它有4個元素

也等價于:

arra=newint[3][?];

for(inti=0;i<3;i++){arra[i]=newint[4];}

在初始化二維數(shù)組時也可以只指定數(shù)組的行數(shù)而不給出數(shù)組的列數(shù),每一行的長度由二維數(shù)組引用時決定。但是,不能只指定列數(shù)而不指定行數(shù)。

(2)在聲明數(shù)組時創(chuàng)建數(shù)組對象。其格式如下:

類型說明符[][]數(shù)組名=new類型說明符[數(shù)組長度][?];

類型說明符數(shù)組名[][]=new類型說明符[數(shù)組長度][數(shù)組長度];

例如:

int[][]arr=newint[4][];

intarr[][]=newint[4][3];

不指定行數(shù)而指定列數(shù)是錯誤的。

例如:int[][]arr=newint[?][4];行列

2.直接指定初值的方式創(chuàng)建二維數(shù)組對象

用直接指定初值的方式創(chuàng)建二維數(shù)組對象,是在數(shù)組聲明的同時創(chuàng)建數(shù)組對象。將數(shù)組元素的初值依次寫入賦值號后的一對花括號內的花括號內。例如:

int[][]arr1={{3,-9,6},{8,0,1},{11,9,8}};

聲明并創(chuàng)建了二維數(shù)組對象,arr1數(shù)組有3個元素,每個元素又都是有3個元素的一維數(shù)組。

用指定初值的方式創(chuàng)建數(shù)組對象時,各子數(shù)組元素的個數(shù)可以不同。例如:

int[][]arr1={{3,-9},{8,0,1},{10,11,9,8}};等價于: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個一維數(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ù)組對象的值

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ù)組對象

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ù)組的對象的值

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ù)組的對象的值

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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論