1. 程式人生 > >Java基礎知識-不會的 day07-練習、ASCII編碼、逆序、排序

Java基礎知識-不會的 day07-練習、ASCII編碼、逆序、排序

1.for迴圈的“末尾迴圈體"可以不是i++,可以每次增長2或者其它數
  for(int i=1;i<100;i+=2){}
2.java語言中乘除和取餘先執行哪個?強制型別轉換和乘除先執行哪個?
   %和*/優先順序是相同的。 從左往右執行。強制型別轉換先執行,乘除後執行。
   eg.x=2.5,y=4.7,a=7
        從左到右依次運算
       %和*/優先順序是相同的。 
       t=x+a%3*(int)(x+y)%2/4
       =2.5+7%3*(int)(2.5+4.7)%2/4
       =2.5+1*(int)7.2%2/4   
       =2.5+7%2/4
       =2.5+1/4
       =2.5+0
       =2.5
如果t是浮點型, 那麼結果就是2.5  如果t是整數型別,那麼結果就是2
3.如何取3位數字的個十百位數
  eg.bai = i/100;
     shi = i/10%10;
     ge = i%10;
4.ASCII編碼表歷史及要點
  人為規定,字母a對應十進位制數97,大寫字母A對應十進位制65。
  數字0-9對應ASCII編碼十進位制為48-57,字母a-z對應ASCII編碼十進位制為97-122,字母A-Z對應ASCII編碼十進位制為65-90。(我理解:因為美國人先寫大寫字母,所有大寫字母的ASCII編碼數字靠前)
   有了ASCII碼錶後,各國做自己的碼錶,中國從GB2312-->GBK,後來國際標準化組織,弄了一個萬國碼Unicode.


5.char 和int型別互轉,char2個位元組,int4個位元組。
   char儲存的時候,就是存的char變數
  char轉化成int時,先變成對應ASCII值,再運算。
   char a = 'a';
   System.out.println(a); // 輸出a
   int i = a+1;
   System.out.println(i); // 輸出98


6.char儲存漢字,查詢unicode編碼表
7.char可以和int計算,提升為int型別,
  char的取值範圍是0-65535
  
  short也是2個位元組,取值範圍 -32768 - 32767,二進位制最高位是符號位,1是負數,0是正數。
  char型別二進位制,全是數值,沒有符號位。二進位制的第一位,0 1不是符號位。
  char又叫做無符號的資料型別(沒有符號位)。


8.列印9*9的乘法口訣表
  for(int i=1;i<9;i++){//外行控制行數
     for(int j=1;j<i;j++){
        System.out.println(j+"*"+i+"="+ j*i + " "); //換成"\t",相當於tab鍵。
   }
}
9.tab鍵對應字元 "\t"
10.陣列的逆序
   前提:陣列是從小到大排的
   概念:陣列的元素,進行位置上的交換;逆序!=反向遍歷
   比如:12345 逆序的實現思想:陣列最遠端位置的交換,通過索引(指標思想)
程式碼如下:
public static void main(String[] args){
int[] arr = {1,5,68,17};

//逆序前
printArray(arr);
reverse(arr);
//逆序後
printArray(arr);
}

//列印陣列
public static void printArray(int[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}

//逆序,預設原先是123456這樣按順序排的
public static void reverse(int[] arr){
//陣列遍歷,最遠端交換
for(int min=0,max = arr.length-1;min<max;min++,max-- ){

    int temp = arr[min];
    arr[min] = arr[max];
                arr[max] = temp;
}
}
11.靜態方法不能呼叫非靜態方法的原因
   1.靜態方法優先於物件被建立


   2.非靜態方法通過物件建立


   3.靜態方法在記憶體中建立後,還沒有建立物件,所以不能呼叫非靜態方法和變數。


12.//null 型別呼叫靜態方法,輸出什麼?
   public class Test{


private static void Print(){
System.out.println("Print()");
}


public static void main(String[] args) {


((Test)null).Print();


}


}


問輸出什麼?


//輸出是Print()


    因為:1.Print()是靜態方法,不用物件也可以呼叫,((Test)null).Print() 這種格式也可以。


          2.null 可以轉換成任意引用型別


          3.((Test)null).Print() 相當於 Test t = null; t.Print();


          4.如果將Print()方法的修飾符去掉,執行時會報空指標異常,因為是在靜態方法中呼叫非靜態方法。


13.排序一般升序排列
14.選擇排序和氣泡排序區別與使用
   
   選擇排序:陣列的每個元素都進行比較(拿1個數和其他所有數比,把小的數放前面)
   氣泡排序:陣列中相鄰元素進行比較 (第1個和第1個比,第2個和第3個比,大的跑到最後面)
   規則:比較大小,位置交換


   (1)選擇排序:
        定義方法:實現陣列的選擇排序
        返回值:沒有
        引數:陣列
        實現步驟:
         1>.巢狀迴圈
            外迴圈,控制比較了多少次
            內迴圈,控制比較多少個元素
         2>.判斷元素的大小值
            小值,儲存到小的索引


程式碼如下:
    public static void main(String[] args){
int[] arr = {5,7,6,34,44,9,-4};
selectSort(arr);
printArray(arr);
}


    //選擇排序
public static void selectSort(int[] arr){
//步驟:外層
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i] > arr[j]){
//換位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}

//輸出
public static void printArray(int[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}


      (2)氣泡排序
      public static void main(String[] args){
int[] arr = {5,6,1,7,3,0,-2};
bubbleSort(arr);
printArray(arr);
}

//氣泡排序
public static void bubbleSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
//換位
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}

//列印
public static void printArray(int[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}    
15.陣列的折半查詢
   前提:被查詢的陣列中的元素,必須有序排列


public static void main(String[] args){
int[] arr = {1,2,3,4,5,6,7};
int index = binarySearch(arr,7);
System.out.println(index);
}
//二分查詢
/*
定義方法:實現折半查詢
引數:陣列,被查詢的元素
返回值 索引
實現步驟:1.需要的變數定義
           三個指標
2.進行迴圈折半
   可以折半的條件 min《=max
3.讓被找元素和中間索引元素進行比較
    元素>中間索引 小指標 = 中間+1
元素<中間索引 大指標 = 中間-1
元素 == 中間索引 找到了,結束了,返回中間索引
4.迴圈結束,無法折半
  元素沒有找到,返回-1
*/
public static int binarySearch(int[] arr,int key ){
//1.定義3個變數
int min = 0;
int max = arr.length -1;
int mid = 0;
//迴圈折半,條件min<= max
while(min <= max){
//計算中間索引
mid = (min+max)/2;
if(key >arr[mid]){
min = mid + 1;
}else if(key < arr[mid]){
max = mid - 1;
}else{
//找到索引,返回元素索引
return mid;
}
}
return -1;
}