關于菱形,當三角尖朝上,可以改變條件。讓條件隨著外循環變化。
當尖朝下,可以改變初始化值,讓初始化值隨著外循環變化。
練習:菱形
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();
? ? ? ? ? ? ? ? ? }
? ? ? ? }
}
練習:給出一個十進制數得出它的各十六進制位
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指向的是數組在堆中的首地址。
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語言的基礎。著重明確什么是重載,知道重載如何使用,什么時候使用。明確數組在內存中是如何存儲的,千萬區分出棧內存和堆內存,知道分別存儲的是什么。會用數組編寫一些簡單的程序,掌握數組如何遍歷、排序、查找等問題。