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 ? ? ? ?
? ? ? ? 對(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?)?