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

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

? ? ? ? 數(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)里不要寫長(zhǎng)度,因?yàn)閷懥碎L(zhǎng)度容易出錯(cuò)~而且數(shù)字的個(gè)數(shù)和數(shù)值都已經(jīng)列舉出來了,再寫長(zhǎng)度也沒有必要~

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

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

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

? ? ? ? 例:

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

? ? ? ? arr[0]=90;

? ? ? ? arr[1]=80;

? ? ? ? 數(shù)組的一些常見問題:

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

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

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

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

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

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

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

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

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

????????數(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ù)組名稱.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)隔開。

? ? ? ? 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)行下述語句會(huì)出現(xiàn)下述結(jié)果,說明把數(shù)組的地址給輸出啦。

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

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

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

? ? ? ? 思路:

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

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

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

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

? ? ? ? 步驟:

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

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

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

? ? ? ? 需要定義一個(gè)功能來完成,以便提高復(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ù)組中次小元素。依次類推,就可以排序完成。

? ? ? ? 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è)問題:

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

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

? ? ? ? 選擇排序特點(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)常被問到的,排序的代碼寫法有很多,這只是其中一種。如果需要排序的元素不多,可以采用上面這種寫法,如果比較多,用這種寫法效率就不高啦。

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

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

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

? ? ? ? 不。

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

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

? ? ? ? 2,應(yīng)付面試。去面試,面試官說,來~寫個(gè)冒泡排序~

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

? ? ? ? 不管是什么排序方法,都有一個(gè)共性:都需要對(duì)滿足條件的元素進(jìn)行位置置換,所以我們可以把換位置這個(gè)功能提取出來,封裝成一個(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;//代表沒有找到

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? ? ? 接下來介紹另外一種更有效率的查找方式:折半查找。

? ? ? ? 縮小范圍的查找會(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ù)類型,直到它可以存入數(shù)據(jù)就對(duì)啦

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

? ? ? ? ? ? ? ? {

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

? ? ? ? ? ? ? ? ? ? ? ? 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)制:

? ? ? ? 思想:

? ? ? ? 接下來用代碼來體現(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è)表里面去,后面再來查詢這個(gè)表~

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

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

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

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

? ? ? ? 可以通過數(shù)組的形式來定義。

? ? ? ? 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,說明有效位已經(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ù)組最后一位開始存的,打印的時(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)換之間有很多共性的過程,我們把這個(gè)過程抽取出來,封裝到一個(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ù)來調(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];//定義了名稱為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í))?? ? ? ? ?

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容