1. 程式人生 > 其它 >作業系統學習筆記(2)常用Linux命令_程序控制類命令

作業系統學習筆記(2)常用Linux命令_程序控制類命令

陣列使用

  • 普通的for迴圈

package javaSE.array;

public class ArrayDemo03 {
   public static void main(String[] args){
       int[] arrays = {1,2,3,4,5};

       //列印全部的陣列元素
       for (int i = 0; i < arrays.length; i++){
           System.out.println(arrays[i]);
      }

       //計算所有元素的和
       int sum = 0;
       for (int i = 0; i < arrays.length; i++){
           sum += arrays[i];
      }
       System.out.println(sum);

       //查詢最大元素
       int max = arrays[0];
       for (int i = 1; i < arrays.length; i++){
           if (max < arrays[i]){
               max = arrays[i];
          }
      }
       System.out.println(max);
  }
}

 

  • For-Each迴圈

  • 陣列作方法入參

  • 陣列作返回值

package javaSE.array;

public class ArrayDemo04 {
   public static void main(String[] args) {
       int[] arrays = {1,2,3,4,5};

       //arrays.for   增強型for迴圈   沒有下標   遍歷陣列元素
       for (int array : arrays) {
           System.out.println(array);
      }
       System.out.println("==============================");

      printArray(arrays);//1 2 3 4 5
       

      int[] reverse = reverse(arrays);
      printArray(reverse);//5 4 3 2 1
  }

   //列印陣列元素
   public static void printArray(int[] arrays){
       for (int i = 0; i < arrays.length; i++) {
           System.out.print(arrays[i]+" ");
      }
  }

   //反轉陣列
   public static int[] reverse(int[] arrays){
       int[] result = new int[arrays.length];

       for (int i = 0, j = result.length-1; i <arrays.length ; i++,j--) {
           result[j] = arrays[i];
      }

       return result;
  }
}

 

 

多維陣列

  • 多維陣列可以看成是陣列的陣列,比如二維陣列就是一個特殊的一維陣列,其每一個元素都是一個一維陣列。

  • 二維陣列:

int a[][] = new int[2][5];
  • 解析:以上二維陣列a可以看成一個兩行五列的陣列

package javaSE.array;


public class ArrayDemo05 {
   public static void main(String[] args){
       //[4][2]
       int[][] array = {{1,2},{2,3},{3,4},{4,5}};

       System.out.println(array[0][0]);//1
       System.out.println(array[0][1]);//2

       ArrayDemo04.printArray(array[0]);//ArrayDemo04實驗寫的方法printArray()   (列印陣列中的元素) 輸出為1 2
       System.out.println();//換行

       //輸出陣列長度
       System.out.println(array.length);//4
       System.out.println(array[0].length);//2

       System.out.println("======================");
       //輸出二維陣列中的所有元素
       for (int i = 0; i < array.length; i++) {
           for (int j = 0; j < array[i].length; j++) {
               System.out.println(array[i][j]);
          }

      }
  }
}

 

 

Arrays類

  • 陣列的工具類java.util.Arrays

  • Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫,而“不用”使用物件來呼叫(注意是“不用”而不是“不能”)

  • 具有以下常用功能

    • 給陣列賦值:通過fill方法

    • 對陣列排序:通過sort方法,按升序

    • 比較陣列:通過equals方法比較陣列中元素值是否相等

    • 查詢陣列元素:通過binarySearch方法能對排序好的陣列進行二分查詢法操作

package javaSE.array;

import java.util.Arrays;

public class ArrayDemo06 {
   public static void main(String[] args) {
       int[] a = {4,5,3,6,7,8,2};

       System.out.println(a);//[I@2d98a335   無法打印出陣列元素
       //列印陣列元素Arrays.toString
       System.out.println(Arrays.toString(a));//[4, 5, 3, 6, 7, 8, 2]

       //對陣列進行排序Arrays.sort   升序
       Arrays.sort(a);
       System.out.println(Arrays.toString(a));//[2, 3, 4, 5, 6, 7, 8]

       //Arrays.fill   陣列填充
       Arrays.fill(a,10);
       System.out.println(Arrays.toString(a));//[10, 10, 10, 10, 10, 10, 10]
       //填充部分
       Arrays.fill(a,2,4,0);
       System.out.println(Arrays.toString(a));//[10, 10, 0, 0, 10, 10, 10]     填充了2~4號位置
  }
}

 

氣泡排序

  • 氣泡排序是最出名的排序演算法之一,總共有八大排序

  • 冒泡的程式碼,兩層迴圈,外層冒泡輪數,裡層依次比較

  • 時間複雜度為O(n^2)

package javaSE.array;

import java.util.Arrays;

public class ArrayDemo07 {
   public static void main(String[] args) {
       int[] a = {1,5,6,7,4,6,8};
       int[] sort = sort(a);
       System.out.println(Arrays.toString(sort));
  }

   //氣泡排序
   /*1、比較陣列中,兩個相鄰的元素,若第一個數比第二個數大,就交換它們的位置
     2、每一次比較,都會產生出一個最大或者最小的數字
     3、下一輪則可以少一次排序
     4、一次迴圈直到結束
    */
   public static int[] sort(int[] array){
       //臨時變數
       int temp = 0;

       //外層迴圈,判斷要迴圈幾次
       for (int i = 0; i < array.length-1; i++) {//array.length-1是為了不讓其溢位
           
           //優化
           boolean flag = false;//通過flag標識位減少沒有意義的比較

           //記憶體迴圈,比較兩個數,若第一個數比第二個數大,則交換位置
           for (int j = 0; j < array.length-1-i; j++) {
               if (array[j+1] < array[j]){
                   temp = array[j];
                   array[j] = array[j+1];
                   array[j+1] = temp;
                   flag = true;
              }
          }
           
           if (flag == false){//如果flag 沒有被內迴圈中的語句換為true,代表內迴圈沒有執行,即已經排好序
               break;//跳出迴圈
          }
      }
       return array;
  }
}

 

 

稀疏陣列

  • 當一個數組中大部分元素為0,或者為同一值的陣列時,可以使用稀疏陣列來儲存該陣列

  • 處理方式:

    • 記錄陣列一共有幾行幾列,有多少個不同值

    • 把具有不同值的元素和行列及值記錄在一個小規模的陣列中,從而縮小程式的規模

package javaSE.array;

import java.util.Arrays;

public class ArrayDemo08 {
   public static void main(String[] args) {
       //1、建立一個二維陣列11*11   0:沒有棋子     1:黑棋   2:白棋
       int[][] array1 = new int[11][11];
       array1[1][2] = 1;
       array1[2][3] = 2;

       System.out.println("輸出原始陣列");
       out(array1);

       //建立稀疏陣列
       int[][] array2 = create(array1);
       //輸出稀疏陣列
       outx(array2);

       //還原
       int[][] array3 = revert(array2);
       System.out.println("還原後為:");
       out(array3);
  }
   //輸出原始陣列
   public static void out(int[][] array){
       for(int[] ints : array){
           for(int anInt : ints){
               System.out.print(anInt+"\t");
          }
           System.out.println();
      }

  }
   
   //轉換為稀疏陣列儲存
   //建立一個稀疏陣列的陣列
   public static int[][] create(int[][] array) {
       int[][] array2 = new int[change(array)+1][3];

       array2[0][0] = array.length;        //行數
       array2[0][1] = array[0].length;     //列數
       array2[0][2] = change(array);       //有效值個數

       //遍歷二維陣列,將非零的值,存放在稀疏陣列中
       int count = 0;
       for (int i = 0; i < array.length; i++) {
           for (int j = 0; j < array[i].length; j++) {
               if (array[i][j] != 0){
                   count++;
                   array2[count][0] = i;//橫座標
                   array2[count][1] = j;//縱座標
                   array2[count][2] = array[i][j];//值
              }
          }
      }