Java基礎(chǔ)day04筆記:數(shù)組的常見(jiàn)操作|排序|查找|進(jìn)制轉(zhuǎn)換|二維數(shù)組

01-數(shù)組(靜態(tài)初始化-常見(jiàn)問(wèn)題)

? ? ? ? 數(shù)組的定義方式:

? ? ? ? int[] arr=new int[2];

? ? ? ? 或者

? ? ? ? int arr[]=new int[2];

? ? ? ? 雖然兩種都可以,但還是用第一種方式比較規(guī)范哦。

? ? ? ? 還有一種定義方式:

? ? ? ? int[] arr=new int[]{3,1,6,5,4};

? ? ? ? 這種方式叫做靜態(tài)初始化方式。創(chuàng)建了一個(gè)數(shù)組實(shí)體,并且給這個(gè)實(shí)體中的每一個(gè)位置都添加了元素。

? ? ? ? 注意后面的方括號(hào)里不要寫(xiě)長(zhǎng)度,因?yàn)閷?xiě)了長(zhǎng)度容易出錯(cuò)~而且數(shù)字的個(gè)數(shù)和數(shù)值都已經(jīng)列舉出來(lái)了,再寫(xiě)長(zhǎng)度也沒(méi)有必要~

? ? ? ? 它的簡(jiǎn)化形式為:

? ? ? ? int[] arr={3,1,6,5,4};

? ? ? ? 一般在數(shù)據(jù)明確的情況下都可以用這種簡(jiǎn)化形式,數(shù)據(jù)不明確的話(huà)還是乖乖用第一種~

? ? ? ? 例:

? ? ? ? int[] arr=new int[5];

? ? ? ? arr[0]=90;

? ? ? ? arr[1]=80;

? ? ? ? 數(shù)組的一些常見(jiàn)問(wèn)題:

? ? ? ? 沒(méi)有結(jié)果。

????????但是編譯的時(shí)候?yàn)槭裁礇](méi)有錯(cuò)誤提示呢?

? ? ? ? 因?yàn)榫幾g只檢查語(yǔ)法錯(cuò)誤,而到運(yùn)行的時(shí)候,才會(huì)到堆內(nèi)存當(dāng)中去開(kāi)辟一個(gè)數(shù)組空間,并分配0、1、2這三個(gè)角標(biāo),這時(shí),當(dāng)你想要打印3號(hào)角標(biāo)的時(shí)候發(fā)現(xiàn)不存在,才會(huì)產(chǎn)生問(wèn)題。

? ? ? ? 所以運(yùn)行的時(shí)候就會(huì)產(chǎn)生問(wèn)題啦: ?

? ? ? ? 這個(gè)問(wèn)題是:數(shù)組角標(biāo)越界異常,具體哪個(gè)角標(biāo)越界了,會(huì)顯示在上面框出的那句話(huà)后面。

? ? ? ? 紅框框出來(lái)的那句話(huà)意思是:操作數(shù)組時(shí),訪問(wèn)到了數(shù)組中不存在的角標(biāo)。

? ? ? ? 還有一種情況,也是編譯時(shí)沒(méi)有問(wèn)題,運(yùn)行時(shí)會(huì)報(bào)錯(cuò):

????????紅框里的話(huà)報(bào)錯(cuò)內(nèi)容為:空指針異常:當(dāng)引用沒(méi)有任何指向,值為null的情況時(shí),該引用還用于操作實(shí)體。

? ? 02-數(shù)組(常見(jiàn)操作-遍歷)

????????數(shù)組的操作:

? ? ? ? 獲取數(shù)組中的元素。通常會(huì)用到遍歷。

? ? ? ? 例:

? ? ? ? int[] arr=new int[3];

? ? ? ? for(int x=0;x<3;x++)

? ? ? ? {

? ? ? ? ????????System.out.println("arr["+x+"]="+arr[x]+";");

? ? ? ? }

? ? ? ? 用for循環(huán),循環(huán)結(jié)束變量就消失啦,不再占用內(nèi)存。

? ? ? ? 數(shù)組中有一個(gè)屬性可以直接獲取到數(shù)組元素的個(gè)數(shù)。

? ? ? ? 使用方式:數(shù)組名稱(chēng).length=

? ? ? ? 例:

? ? ? ? int[] arr={3,6,5,1,8,9,67};

? ? ? ? System.out.println("length:"+arr.length);

? ? ? ? for(int x=0;x<arr.length;x++)

? ? ? ? {

? ??????????????System.out.println("arr["+x+"]="+arr[x]+";");

? ? ? ? }

? ? ? ? 求和:

? ? ? ? int sum=0;

? ? ? ? for(int x=0;x<arr.length;x++)

? ? ? ? {

? ? ? ? ? ? ? ? sum+=arr[x];

? ? ? ? ? ? ? ? System.out.println("sum="+sum);

? ? ? ? }

? ? ? ? 操作數(shù)組,通常都會(huì)用到for循環(huán)~

? ? ? ? 一個(gè)例子:

? ? ? ? //定義功能:用于打印數(shù)組中的元素,元素間用逗號(hào)隔開(kāi)。

? ? ? ? System.out.print("[");

????????for(int x=0;x<arr.length;x++)

? ? ? ? {

? ? ? ? ? ? ? ? if(x!=arr.length-1)

? ? ? ? ? ? ? ? ? ? ? ? System.out.print(arr[x]+",");

? ? ? ? ? ? ? ? else

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

? ? ? ? }

? ? ? ? 運(yùn)行下述語(yǔ)句會(huì)出現(xiàn)下述結(jié)果,說(shuō)明把數(shù)組的地址給輸出啦。

????????System.out.println(arr);

????03-數(shù)組(常見(jiàn)操作-獲取最值)

? ? ? ? 獲取數(shù)組中的最大值:

? ? ? ? 思路:

? ? ? ? 1,獲取最值需要進(jìn)行比較,每一次比較都會(huì)有一個(gè)較大的值,因?yàn)樵撝挡淮_定。通過(guò)一個(gè)變量進(jìn)行存儲(chǔ)。

? ? ? ? 2,讓數(shù)組中的每一個(gè)元素都和這個(gè)變量中的值進(jìn)行比較。

? ? ? ? 如果大于變量中的值,就用該變量記錄較大值。

? ? ? ? 3,當(dāng)所有的元素都比較完成,那么該變量中存儲(chǔ)的就是數(shù)組中的最大值。

? ? ? ? 步驟:

? ? ? ? 1,定義變量。初始化為數(shù)組中任意一個(gè)元素即可。

? ? ? ? 2,通過(guò)循環(huán)語(yǔ)句對(duì)數(shù)組進(jìn)行遍歷。

? ? ? ? 3,在變量過(guò)程中定義判斷條件,如果遍歷到的元素比變量中的元素大,就賦值給該變量。

? ? ? ? 需要定義一個(gè)功能來(lái)完成,以便提高復(fù)用性。

? ? ? ? 1,明確結(jié)果,數(shù)組中的最大元素 int

? ? ? ? 2,未知內(nèi)容:一個(gè)數(shù)組,int[]

? ? ? ? public static int getMax(int[] arr)

? ? ? ? {

? ? ? ? ????????int max=arr[0];

? ? ? ????????? for(int x=1;x<arr.length;x++)

? ? ????????? ? {

? ? ? ? ????????? ? ? ? if(arr[x]>max)

? ? ? ? ? ????????? ? ? ? ? ? ? max=arr[x];

? ????????? ? ? }

? ????????? ? ? return max;

? ? ? ? }

? ? ? ? 獲取最大值的另一種方式,可不可以將臨時(shí)變量初始化為0呢?

? ? ? ? 但是如果這個(gè)數(shù)組中全是負(fù)數(shù),臨時(shí)變量初始化為0就不可行。

? ? ? ? 換一個(gè)思路,我們不僅可以將臨時(shí)變量初始化為數(shù)組中的元素,也可以初始化為數(shù)組的角標(biāo)。這樣就可以將臨時(shí)變量初始化為0啦。

? ??????public static int getMax(int[] arr)

????????{

????????????????int max=0;

????????????????for(int x=1;x<arr.length;x++)

????????????????{

????????????????????????if(arr[x]>max)

????????????????????????????????max=x;

????????????????}

????????????????return arr[max];

? ? ? ? }

? ? ? ? 獲取最小值也是同理。

????04-數(shù)組(排序-選擇排序)

? ? ? ? 選擇排序思想:

? ? ? ? 以從小到大排序?yàn)槔?b>

? ? ? ? 先用0角標(biāo)位置的元素依次和后面的元素相比,如果后面位置的元素比角標(biāo)位置元素小,則將該位置元素與0角標(biāo)位置元素做交換。比完所有元素之后,0角標(biāo)位置存放的將是數(shù)組中的最小元素。接著,將1角標(biāo)元素依次和后面的元素相比,......,1角標(biāo)位置存放的將是數(shù)組中次小元素。依次類(lèi)推,就可以排序完成。

? ? ? ? public static void selectSort(int[] arr)

? ? ? ? {

? ? ? ? ? ? ? ? for(int x=0;x<arr.length-1;x++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? for(int y=x+1;y<arr.length-1;y++)

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(arr[x]>arr[y])

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int temp=arr[x];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arr[x]=arr[y];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arr[y]=arr[temp];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? }


? ? ? ? 兩個(gè)問(wèn)題:

? ? ? ? 1,返回值類(lèi)型,假設(shè)傳進(jìn)來(lái)的數(shù)組為a,那么操作原數(shù)組arr和操作a,其實(shí)都是在操作同一個(gè)數(shù)組實(shí)體,只是多個(gè)引用在操作同一個(gè)數(shù)組。因此不用返回a,因?yàn)閍rr和a都指向同一個(gè)數(shù)組。所以返回值類(lèi)型為void。

? ? ? ? 2,沒(méi)有必要遍歷到最后一個(gè)角標(biāo),因?yàn)樽詈笾皇R粋€(gè)元素了,沒(méi)有和它比的了~

? ? ? ? 選擇排序特點(diǎn):

? ? ? ? 內(nèi)循環(huán)結(jié)束一次,最值出現(xiàn)在頭角標(biāo)位置上。

????05-數(shù)組(排序-冒泡排序)

? ? ? ? 冒泡排序思想:

????????相鄰的兩個(gè)元素進(jìn)行比較,如果符合條件就換位。

? ? ? ? 每循環(huán)一次,最值出現(xiàn)在最后位,最末一個(gè)元素下次就不參與循環(huán)了。

? ? ? ? 小的元素往前跑,大的元素往后跑,這就是冒泡排序的思想。

? ? ? ? public static void bubbleSort(int[] arr)

? ? ? ? {

? ? ? ? ? ? ? ? for(int x=0;x<arr.length-1;x++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? for(int y=0;y<arr.length-x-1;y++)//-x:讓每一個(gè)比較的元素減少,-1:避免角標(biāo)越界

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(arr[y]>arr[y+1])

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int temp=arr[y];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int arr[y]=arr[y+1];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int arr[y+1]=temp;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? ? ? 選擇和冒泡排序是面試中最經(jīng)常被問(wèn)到的,排序的代碼寫(xiě)法有很多,這只是其中一種。如果需要排序的元素不多,可以采用上面這種寫(xiě)法,如果比較多,用這種寫(xiě)法效率就不高啦。

? ? ? ? 優(yōu)化的方法的思想:在比較的過(guò)程中,為了減少在堆內(nèi)存中換位置的次數(shù),則先不換位置,在棧內(nèi)存中記錄下每次比較的結(jié)果,當(dāng)一個(gè)內(nèi)循環(huán)結(jié)束后,確定了最末位置是最值后,直接將最后一次比較的元素進(jìn)行交換即可。一次內(nèi)循環(huán)下來(lái),堆內(nèi)存中就只換了一次位置。

? ? ? ? 而在真實(shí)的Java開(kāi)發(fā)中,我們不用選擇也不用冒泡,我們用到的排序方法是Arrays.sort(arr);,這是Java怕我們不會(huì)排序,特意提供給我們的排序方法,哈哈~(import java.util.*;)

? ? ? ? 這就意味著我們不用學(xué)選擇排序和冒泡排序嗎?

? ? ? ? 不。

? ? ? ? 我們依然要學(xué),原因有兩個(gè):

? ? ? ? 1,我們可以借此了解排序中的算法。

? ? ? ? 2,應(yīng)付面試。去面試,面試官說(shuō),來(lái)~寫(xiě)個(gè)冒泡排序~

????06-數(shù)組(排序-位置置換功能抽取)

? ? ? ? 不管是什么排序方法,都有一個(gè)共性:都需要對(duì)滿(mǎn)足條件的元素進(jìn)行位置置換,所以我們可以把換位置這個(gè)功能提取出來(lái),封裝成一個(gè)函數(shù)。

? ? ? ? public static void swap(int[]arr,int a,int b)

? ? ? ? {

? ? ? ? ? ? ? ? int temp=arr[a];

? ? ? ? ? ? ? ? arr[a]=arr[b];

? ? ? ? ? ? ? ? arr[b]=temp;

? ? ? ? }

????07-數(shù)組(折半查找)

? ? ? ? //定義功能:獲取key第一次出現(xiàn)在數(shù)組中的位置。如果返回是-1,那么代表該key在數(shù)組中不存在。 ?

? ? ? ? public static int getIndex(int[] arr,int key)

? ? ? ? {

? ? ? ? ? ? ? ? for(int x=0;x<arr.length;x++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? if(arr[x]==key)

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return x;//返回該元素的角標(biāo)

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? return -1;//代表沒(méi)有找到

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? ? ? 接下來(lái)介紹另外一種更有效率的查找方式:折半查找

? ? ? ? 縮小范圍的查找會(huì)使查找速度更快,但是這種查找方式要求數(shù)組必須是有序的。

? ? ? ? public static int halfSearch(int[] arr,int key)

? ? ? ? {

? ? ? ? ? ? ? ? int min,max,mid;

? ? ? ? ? ? ? ? min=0;

? ? ? ? ? ? ? ? max=arr.length-1;

? ? ? ? ? ? ? ? mid=(max+min)/2;

? ? ? ? ? ? ? ? if(arr[mid]!=key)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? if(key>arr[mid])

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? min=mid+1;

? ? ? ? ? ? ? ? ? ? ? ? else if(key<arr[mid])

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? max=mid-1;

? ? ? ? ? ? ? ? ? ? ? ? if(min>max)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return -1;

? ? ? ? ? ? ? ? ? ? ? ? mid=(max+min)/2;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return mid; ? ? ? ? ? ? ? ?

? ? ? ? }

? ? ? ? 折半的第二種方式:

? ? ? ? public static int halfSerch_2(int[] arr,int key)

? ? ? ? {

? ? ? ? ? ? ? ? int min=0,max=arr.length-1,mid;

? ? ? ? ? ? ? ? while(min<=max)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? mid=(max+min)>>1;//也是除以2的意思

? ? ? ? ? ? ? ? ? ? ? ? if(key>arr[mid])

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?min=mid+1;

? ? ? ? ? ? ? ? ? ? ? ? else if(key<arr[mid])

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? max=mid-1;

? ? ? ? ? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return mid;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return -1;

? ? ? ? }

? ? ? ? 練習(xí):有一個(gè)有序的數(shù)組,想要將一個(gè)元素插入到該數(shù)組中,還要保證該數(shù)組是有序的。如何獲取該元素在數(shù)組中的位置。

? ? ? ? min就是8最后要插入的位置。

? ? ? ? public static int getIndex_2(int[] arr,int key)

? ? ? ? {

? ??????????????int min=0,max=arr.length-1,mid;

????????????????while(min<=max)

????????????????{

????????????????????????mid=(max+min)>>1;//也是除以2的意思

? ? ? ? ? ? ? ? ? ? ? ? if(key>arr[mid])

????????????????????????????????min=mid+1;

????????????????????????else if(key

????????????????????????????????max=mid-1;

????????????????????????else

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return mid;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return min;//其實(shí)和上面代碼不同的部分就只是將return -1改成return min。

? ? ? ? }

? ? ? ? 這段代碼的思想是,在數(shù)組中尋找8的位置,如果存在,則將8插入在這個(gè)位置;如果不存在,則將8插入min這個(gè)位置。

? ? 08-數(shù)組(十進(jìn)制-二進(jìn)制)

? ? ? ? 十進(jìn)制---->二進(jìn)制:

? ? ? ? public static void toBin(int num)

? ? ? ? {

? ? ? ? ? ? ? ? StringBuffer sb=new StringBuffer();//先不要管這是什么數(shù)據(jù)類(lèi)型,直到它可以存入數(shù)據(jù)就對(duì)啦

? ? ? ? ? ? ? ? while(num>0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? //System.out.println(num%2);這樣打出來(lái)是反的

? ? ? ? ? ? ? ? ? ? ? ? sb.append(num%2);//將數(shù)據(jù)存入sb

????????????????????????num=num/2;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println(sb.reverse());//reverse為將sb反轉(zhuǎn),這樣就正啦

? ? ? ? }

????09-數(shù)組(十進(jìn)制-十六進(jìn)制)

? ? ? ? 十進(jìn)制---->十六進(jìn)制:

? ? ? ? 思想:

? ? ? ? 接下來(lái)用代碼來(lái)體現(xiàn):

? ? ? ? 那么右移的循環(huán)次數(shù)應(yīng)該是多少呢?因?yàn)槭?2位,所以最多右移8次~

????????public static void toHex(int num)????????

? ? ? ? {

? ? ? ? ? ? ? ? for(int x=0;x<8;x++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? int temp=num&15;

? ? ? ? ? ? ? ? ? ? ? ? if(temp>9)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println((char)(temp-10+'A'));

? ? ? ? ? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println(temp);

? ? ? ? ? ? ? ? ? ? ? ? num=num>>>4;

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? ? ? 但這樣輸出是反噠,換個(gè)方法:

? ??????public static void toHex(int num)

????????{

? ? ? ? ? ? ? ? StringBuffer sb=new StringBuffer();

????????????????for(int x=0;x<8;x++)

????????????????{

????????????????????????int temp=num&15;

????????????????????????if(temp>9)

????????????????????????????????sb.append((char)(temp-10+'A'));

????????????????????????else

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sb.append(temp);

? ? ? ? ? ? ? ? ? ? ? ? num=num>>>4;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println(sb.reverse());

? ? ? ? }

????10-數(shù)組(查表法十進(jìn)制-十六進(jìn)制)

? ? ? ? 什么叫查表法呢?

? ? ? ? 即將這種一一對(duì)應(yīng)關(guān)系先存到一個(gè)表里面去,后面再來(lái)查詢(xún)這個(gè)表~

? ? ? ? 查表法:將所有的元素臨時(shí)存儲(chǔ)起來(lái),建立對(duì)應(yīng)關(guān)系。

? ? ? ? 每一次&15后的值作為索引去查建立好的表,就可以找到對(duì)應(yīng)的元素。

? ? ? ? 這樣比-10+‘a(chǎn)’更方便好用。

? ? ? ? 這個(gè)表怎么建立呢?

? ? ? ? 可以通過(guò)數(shù)組的形式來(lái)定義。

? ? ? ? public static void toHex(int num)

? ? ? ? {

? ? ? ? ? ? ? ? char[] chs={'0','1','2','3'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,'4','5','6','7'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,'8','9','A','B'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,'C','D','E','F'};

? ? ? ? ? ? ? ? //定義一個(gè)臨時(shí)容器

? ? ? ? ? ? ? ? char[] arr=new char[8];//字符數(shù)組的默認(rèn)初始化值是'\u0000',相當(dāng)于一個(gè)空格

? ? ? ? ? ? ? ? int pos=arr.length;

? ? ? ? ? ? ? ? while(num!=0)//一旦num為0,說(shuō)明有效位已經(jīng)都右移完啦,前面的就都是0不用再取啦

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? int temp=num&15;

? ? ? ? ? ? ? ? ? ? ? ? //System.out.println(chs[temp]);

? ? ? ? ? ? ? ? ? ? ? ? arr[--pos]=chs[temp];

? ? ? ? ? ? ? ? ? ? ? ? num=num>>>4;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? //存儲(chǔ)數(shù)據(jù)的arr數(shù)組遍歷

? ? ? ? ? ? ? ? for(int x=pos;x<arr.length;x--)//數(shù)據(jù)是從數(shù)組最后一位開(kāi)始存的,打印的時(shí)候正著打就完全OK~

? ? ? ? ? ? ? ? {

? ??????????????????????System.out.print(arr[x]+",");

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? 11-數(shù)組(查表法十進(jìn)制-二進(jìn)制)

? ? ? ? //定義二進(jìn)制的表

? ? ? ? char[] chs={'0','1'};

? ? ? ? //定義一個(gè)臨時(shí)存儲(chǔ)容器

? ? ? ? char[] arr=new char[32];//32個(gè)足夠裝啦

? ? ? ? //定義一個(gè)操作數(shù)組的指針

? ? ? ? int pos=arr.length;

? ? ? ? while(num!=0)

? ? ? ? {

? ? ? ? ? ? ? ? int temp=num&1;

? ? ? ? ? ? ? ? arr[--pos]=chs[temp];

? ? ? ? ? ? ? ? num=num>>>1;

????????}

? ? ? ? for(int x=pos;x<arr.length;x++)

? ? ? ? {

? ? ? ? ? ? ? ? System.out.print(arr[x]);

? ? ? ? }

????12-數(shù)組(進(jìn)制轉(zhuǎn)換優(yōu)化)

? ? ? ? 我們發(fā)現(xiàn)兩種進(jìn)制轉(zhuǎn)換之間有很多共性的過(guò)程,我們把這個(gè)過(guò)程抽取出來(lái),封裝到一個(gè)函數(shù)中~

? ? ? ? public static void trans(int num,int base,int offset)

? ? ? ? {

? ? ? ? ? ? ? ? if(num==0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? System.out.println(0);

? ? ? ? ? ? ? ? ? ? ? ? return;

? ? ? ? ? ? ? ? }

????????????????char[] chs={'0','1','2','3'

????????????????????????????????,'4','5','6','7'

????????????????????????????????,'8','9','A','B'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,'C','D','E','F'};

? ? ? ? ? ? ? ? char[] arr=new char[32];

? ? ? ? ? ? ? ? int pos=arr.length;

? ? ? ? ? ? ? ? while(num!=0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? int temp=num&base;

? ? ? ? ? ? ? ? ? ? ? ? arr[--pos]=chs[temp];

? ? ? ? ? ? ? ? ? ? ? ? num=num>>>offset;

????????????????}

? ? ? ? ? ? ? ? for(int x=pos;x<arr.length;x++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? System.out.print(arr[x]); ? ?

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? ? ? 然后要定義功能函數(shù)來(lái)調(diào)用它~

? ? ? ? /*

? ? ? ? 十進(jìn)制---->二進(jìn)制

? ? ? ? */

? ? ? ? public static void toBin(int num)

? ? ? ? {

? ? ? ? ? ? ? ? trans(num,1,1);

? ? ? ? }

????????/*

????????十進(jìn)制---->八進(jìn)制

? ? ? ? */

? ? ? ? public static void toBa(int num)

? ? ? ? {

? ? ? ? ? ? ? ? trans(num,7,3);

? ? ? ? }

????????/*

????????十進(jìn)制---->十六進(jìn)制

? ? ? ? */

? ? ? ? public static void toHex(int num)

? ? ? ? {

? ? ? ? ? ? ? ? trans(num,15,4);

? ? ? ? }

????13-數(shù)組(二維數(shù)組)

? ? ? ? 二維數(shù)組,可以理解為,數(shù)組中的數(shù)組。 ? ? ? ?

? ? ? ? 初始化方式:

? ? ? ? int[][] arr=new int[3][4];//定義了名稱(chēng)為arr的二維數(shù)組, 二維數(shù)組中有3個(gè)一維數(shù)組,每個(gè)一維數(shù)組中有四個(gè)元素。 ??

? ? ? ? 另一種初始化方式:

? ? ? ? int[][] arr=new int[3][];

? ? ? ? System.out.println(arr[0]);//結(jié)果為null ? ? ? ?

二維數(shù)組的默認(rèn)初始化值

? ? ? ? 對(duì)它進(jìn)行初始化:

? ? ? ? int[][] arr=new int[3][];

? ? ? ? arr[0]=new int[3];

????????arr[1]=new int[1];

????????arr[2]=new int[2];//對(duì)數(shù)組中的每一個(gè)小數(shù)組進(jìn)行了手動(dòng)初始化

? ? ? ? System.out.println(arr[0]);//結(jié)果為null ? ??

這時(shí)在內(nèi)存中的表示為:

? ? ? ? System.out.println(arr.length);//打印的是二維數(shù)組的長(zhǎng)度 3;

? ? ? ? System.out.println(arr[0].length);//打印二維數(shù)組中第一個(gè)一維數(shù)組長(zhǎng)度

? ? ? ? 再一種初始化方式~:

? ? ? ? int[][] arr={{3,5,1,7},{2,3,5,8},{6,1,8,2}};

? ? ? ? int sum=0;

? ? ? ? for(int x=0;x<arr.length;x++)

? ? ? ? {

? ? ? ? ? ? ? ? for(int y=0;y<arr[x].length;y++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? sum=sum+arr[x][y];

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println("sum="+sum);

? ? ? ? }

????14-數(shù)組(二維數(shù)組練習(xí))?? ? ? ? ?

? ? ? ? 這次課程的容量感覺(jué)比以前要小~概念少,代碼多~

? ? ? ? 所以完成的速度要比以前快一些~但依然成就感滿(mǎn)滿(mǎn)。繼續(xù)加油,小楠楠( ? 3?)?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,986評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,204評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,964評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,354評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,554評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,918評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,093評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,342評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,755評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,009評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,839評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,107評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    開(kāi)心的鑼鼓閱讀 3,341評(píng)論 0 9
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù),而在處理數(shù)...
    Java幫幫閱讀 1,610評(píng)論 0 9
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一...
    阿里高級(jí)軟件架構(gòu)師閱讀 3,305評(píng)論 0 19
  • 文‖不俗小七 1. 民國(guó)二十三年,江南煙雨中,一個(gè)山河秀麗村莊,叫玲瓏村。 故事也是在那一年開(kāi)始。 ...
    不俗小七閱讀 507評(píng)論 10 20
  • 又過(guò)了愉快的一天,可是,這個(gè)時(shí)候坐在這兒,感覺(jué)有點(diǎn)小遺憾,因?yàn)樽约喊咽謾C(jī)放這兒充電,然后去樓下做吃的,卻忽略了兒子...
    緒英閱讀 149評(píng)論 2 1