嘿,程序員——關于java中的語句、函數與數組知識

圖片鎮樓

關于菱形,當三角尖朝上,可以改變條件。讓條件隨著外循環變化。

當尖朝下,可以改變初始化值,讓初始化值隨著外循環變化。

練習:菱形

class LingXing
{
? ? ? ? publicstatic void main(String[] args)
? ? ? ? {
? ? ? ? ? ? ? ? ? for(inta=5;a>0;a--){
? ? ? ? ? ? ? ? ? ? ? ? ? ?for(intb=1;b
? ? ? ? ? ? ? ? ? ? ? ? ? ?System.out.print("");
? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ?for(intc=6;c>a;c--){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.print("*");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ?for(intd=5;d>a;d--){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.print("*");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ?System.out.println();
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? for(inta=5;a>0;a--){
? ? ? ? ? ? ? ? ? ? ? ? ? ?for(intb=6;b>a;b--){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.print("");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ?for(intc=1;c
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.print("*");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ?for(intd=2;d
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.print("*");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ?System.out.println();
? ? ? ? ? ? ? ? ? }
? ? ? ? }
}


圖片發自簡書App

練習:給出一個十進制數得出它的各十六進制位

class Demo

{

? ? ? ? publicstatic void main(String[] args)

? ? ? ? {

? ? ? ? ? ? ? ? ? inttest=60;

? ? ? ? ? ? ? ? ? intnum;

? ? ? ? ? ? ? ? ? System.out.println(test+"的各十六進制位是:");

? ? ? ? ? ? ? ? ? while(test>0)

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

? ? ? ? ? ? ? ? ? ? ? ? ? ?num=test& 15;

? ? ? ? ? ? ? ? ? ? ? ? ? ?test=test>>4;

? ? ? ? ? ? ? ? ? ? ? ? ? ?if(num>9)

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? charch=(char)(num-10+'A');

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

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

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

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

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

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

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

? ? ? ? ?}

}



函數:定義在類中具有特定功能的一段獨立小程序。也稱為方法。

函數的格式:

修飾符返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數2){

? ? 執行語句;

? ? return 返回值;}

返回值類型:函數運行后的結果的數據類型。

參數類型:是形式參數的數據類型

形式參數:是一個變量,用于存儲調用函數時傳遞給函數的實際參數。

return:用于結束函數。

返回值:該值會返回給調用者。

如何定義一個函數:

1、既然函數是一個獨立的功能,那么該功能的運算結果是什么先明確。因為這是在明確函數的返回值類型。

2、在明確定義該功能的過程中是否需要未知的內容參與運算。因為是在明確函數的參數列表(參數的類型和參數的個數)。


函數的重載(overload):在一個類中,允許存在一個以上的同名函數,只要它們的參數個數或參數類型不同即可。

重載的特點:與返回值類型無關,只看參數列表。

重載的好處:方便于閱讀,優化了程序設計。

什么時候用重載?

當定義的功能相同,但參與運算的未知內容不同時。那么這時就定義一個函數名稱以表示其功能,方便閱讀,而通過參數列表的不同來區分多個同名函數。

數組:同一種類型數據的集合。數組就是一個容器。

int[] x=new int[3]; 所有局部變量都在棧里,使用完自動釋放,例如x,而new出來的對象都在堆里。數組被定義后會有初始化值。在堆中的垃圾會不定時的啟動垃圾回收機制來進行清理。棧中的X指向的是數組在堆中的首地址。


圖片發自簡書App

int[] x=new int[3];

? ? ? ? ? ? ? ? ? int[]y=x;//把數組x的地址給y,數組y和x指向同一數組空間

? ? ? ? ? ? ? ? ? y[1]=89;//此時x[1]=89

? ? ? ? ? ? ? ? ? ? ? x[1]=77;//此時x[1]=77,y[1]=77

ArrayIndexOutOfBoundsException: 數組角標越界異常

NullPointerException 空指針異常

數組的遍歷、取最大(最小)值、排序

選擇排序和冒泡排序掌握:

class ArrayTest

{

? ? public static voidmain(String[] args)

? ? {

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

? ? ? ? ? ? ?printArray(arr);

? ? ? ? ? ? ?//selectSort(arr);

? ? ? ? ? ? ?bubbleSort(arr);

? ? ? ?printArray(arr);

? ? }

? ? //數組遍歷

? ? public static voidprintArray(int[] arr){

? ? ? ? ? ? ?for(intx=0;x

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

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

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

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

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

? ? ? ? ? ? ?}

? ? }

? ? //數組置換函數

? ? public static voidswap(int[] arr,int a,int b){

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

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

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

? ? }

? ? //選擇排序,就是每一個數組與其他數組比較一遍,把最小的先找出來

? ? public static voidselectSort(int[] arr){

? ? ? ? ? ? ?for (intx=0;x

? ? ? ? ? ? ? ? ? ? ? for(inty=x+1;y

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*inttemp=arr[x];

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

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?swap(arr,x,y);

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

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

? ? ? ? ? ? ?}

? ? }

? ? //冒泡排序,就是相鄰數組間比較,最大的往后移

? ? public static voidbubbleSort(int[] arr){

? ? ? ? ? ? ?for (intx=0;x

? ? ? ? ? ? ? ? ? ? ? for(inty=0;y

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*inttemp=arr[y];

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?arr[y+1]=temp;*/

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?swap(arr,y,y+1);

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

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

? ? ? ? ? ? ?}

? ? }

}


折半查找的兩種方法:

class ArrayTest1

{

? ? public static voidmain(String[] args)

? ? {

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

? ? ? ? ? ? ?int key=8;//將一個數找出它插入的位置和查找這個數原理是一樣的,只是返回值的改變。不再是返回-1,而是返回min。

? ? ? ? ? ? ?intindex=getIndex_2(arr,key);

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

? ? }

? ? //第一種折半查找,用需要查找的數與mid比較

? ? public static intgetIndex_1(int[] arr,int key){

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

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

? ? ? ? ? ? ?while(arr[mid]!=key){

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

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

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

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

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

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

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

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

? ? ? ? ? ? ?}

? ? ? ? ? ? ?return mid;

? ? }

? ? //第二種折半查找,用min與max比較

? ? public static intgetIndex_2(int[] arr,int key){

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

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

? ? ? ? ? ? ?while(min

? ? ? ? ? ? ? ? ? ? ? if(arr[mid]

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

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

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

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

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

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnmid;

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

? ? ? ? ? ? ?}

? ? ? ? ? ? ?return -1;

? ? }

}


優化后的十進制轉其他進制方法。

class ArrayTest7

{

? ? public static voidmain(String[] args)

? ? {

? ? ? ? ? ? ?toHex(60);

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

? ? ? ? ? ? ?toBin(6);

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

? ? ? ? ? ? ?toBin(0);

? ? }

? ? public static voidtoHex(int num){

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

? ? }

? ? public static voidtoBin(int num){

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

? ? }

? ? public static voidtrans(int num,int base,int offset){

? ? ? ? ? ? ?char[]ch={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

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

? ? ? ? ? ? ?intpos=arr.length;

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

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

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

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

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

? ? ? ? ? ? ? ? ? ? ? inttemp=num&base;

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

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

? ? ? ? ? ? ?}

? ? ? ? ? ? ?for(intx=pos;x

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

? ? ? ? ? ? ?}

? ? }

}



數組中的數組:二維數組 int[][] arr=new int[3][4];

Int[][] arr=new int[3][];在這里只創建一個含三個一維數組的二維數組,沒有創建每個一維數組中的元素,此時 arr[0]=null;沒有初始化值,指向數據的地址為空。

小問題:

int[] x,y[];//x是一維數組,y是二維數組

相當于int[] x; ?int[] y[];

所以以下賦值語句:

X[0] = y;//是錯的

y[0] = x;//是對的

y[0][0]=x;//是錯的

x[0][0]=y;//是錯的

y[0][0]=x[0];//是對的

x=y;//是錯的

我的總結:這一部分的內容還是主要圍java語言的基礎,熟練掌握各種基礎語句,if、for、while等的綜合運用,能夠編寫小的程序。明確函數是什么,函數的格式,以及如何定義一個函數,這是學習java語言的基礎。著重明確什么是重載,知道重載如何使用,什么時候使用。明確數組在內存中是如何存儲的,千萬區分出棧內存和堆內存,知道分別存儲的是什么。會用數組編寫一些簡單的程序,掌握數組如何遍歷、排序、查找等問題。


圖片發自簡書App
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容