天天看點

我的Java學習之路(第七天)------數組

(參考網易雲課堂:龍馬高新教育)

一、一維數組

定義:類型[ ] 數組名 = new 類型[長度];

數組中存有預設值0,而在引用類型[ ]中為null;

如果在定義前,已經知道數組裡存放的内容,那可以簡單定義為:

類型[ ] 數組名 = {值1,值2,…,值n};

類型[ ] 數組名 = new 類型[ ]{值1,值2,…,值n};

Add:

動态初始化如:int[ ] array = new int[4];

靜态初始化如:int[] array = new int[]{1,2,3,4};

但是像int[] array = new int[3]{1,2,3};就是錯誤的寫法

這樣也是錯的,int[ ] array;array[ ] = {1,2,3};也是錯的!!!

而這樣是可以的:把String names[ ] = new String[ ]{“加油”,“沖呀”};

拆為:String names[ ] ;和 names[ ] = new String[ ]{“加油”,“沖呀”};

這裡老師拓展了一個知識點:就是建立一個随機的數組

package demo;
import java.util.Random;    //導入包

public class Tst_1 {
  public static void main(String[] args) {
    Random rand = new Random();
    int[] a = null;
    a = new int[rand.nextInt(10)]; //開辟記憶體空間,長度是[0,10)的随機數
    System.out.println("數組的長度:"+a.length);
    for(int i=0;i<a.length;i++) {
      a[i] = rand.nextInt(100);
      System.out.println("a["+i+"]="+a[i]);
    }
  }
}      

🌂另外,Java按引用傳值的方式也有點不太一樣!!!

Add:兩個數組對應同一個記憶體區域!!!

package demo;


public class Tst_1 {
  public static void main(String[] args) {
      int[] nums1 = {1,2};
      int[] nums2 = nums1;  //這裡其實把nums1中記錄的數組的位址傳給了nums2
      //現在周遊兩個數組
      System.out.println("第一個數組");
      for(int x:nums1) {
        System.out.println(x);
      }
      System.out.println("第二個數組");
      for(int y:nums2) {
        System.out.println(y);
      }
      //現在 修改下第二個數組中元素值
      nums2[1] = 100;
      System.out.println("第一個數組");
      for(int x:nums1) {
        System.out.println(x);
      }
      System.out.println("第二個數組");
      for(int y:nums2) {
        System.out.println(y);
      }
  }
}
輸出結果為:
第一個數組
1
2
第二個數組
1
2
第一個數組
1
100
第二個數組
1
100      

這裡再來一個簡單的比較最大最小值的代碼!!!

package demo;


public class Tst_1 {
  public static void main(String[] args) {
      int nums[] = {100,5,41,79,58,1000,9854,121};
      int max = nums[0];
      int min = nums[0];
      for(int i=1;i<nums.length;i++) {
        if(nums[i]>max) {
          max = nums[i];
        }
      }
      for(int i=1;i<nums.length;i++) {
        if(nums[i]<min) {
          min = nums[i];
        }
      }
      System.out.printf("該數組中最大值為:%d,最小值為:%d",max,min);
  }
}      

二、二維數組

定義:資料類型[ ][ ] 數組名 = new int[行數][列數];

如:int[ ][ ] array = new int [3][2];或者int[ ][ ] array; array = new int[3][2];

實質我感覺就像是數組的數組

下面舉一個行數列數都定了的二維數組

package demo;

public class Tst_2 {

  public static void main(String[] args) {
    int[][] nums;
    nums = new int[3][2];
    for(int i=0;i<nums.length;i++) {
      for(int j=0;j<nums[i].length;j++) {
        System.out.println("nums["+i+"]["+j+"]="+nums[i][j]);
      }
    }
  }

}      

再舉例列數不定(一定記得用new初始化)

package demo;

public class Tst_2 {

  public static void main(String[] args) {
    int[][] nums = new int[3][];
    nums[0] = new int[2];
    nums[1] = new int[2];
    nums[2] = new int[] {1,2};
    for(int i=0;i<nums.length;i++) {
      for(int j=0;j<nums[i].length;j++) {
        System.out.println("nums["+i+"]["+j+"]="+nums[i][j]);
      }
    }
  }

}      

🌂如果知道數組中存的值還可以:

package demo;

public class Tst_2 {

  public static void main(String[] args) {
    int[][] nums = {{1,2},{1,2,3},{2}};
    for(int i=0;i<nums.length;i++) {
      for(int j=0;j<nums[i].length;j++) {
        System.out.println("nums["+i+"]["+j+"]="+nums[i][j]);
      }
    }
  }

}      

下面補充一道例題,計算某個員工的工資總額

package demo;

public class Tst_2 {

  public static void main(String[] args) {
    int sum = 0;
    int[][] nums = {{1,2},{1,2,3},{2}};
    for(int i=0;i<nums.length;i++) {
      System.out.printf("第%d個人的銷售總額為:",(i+1));
      for(int j=0;j<nums[i].length;j++) {
        sum += nums[i][j];
      }
      System.out.println(sum);
      sum = 0;   //清零便于下一次計算
    }
  }

}      

三、多元數組

定義:資料類型[ ][ ]…[] 數組名 = new int[ ][ ]…[];

類似的寫法,沒啥可說的!!!

四、拓展

4.1 Java中null的使用:可以為引用類型指派,作為初始值

比如:

public static void main(String[] args) {
    String name = null;
    name = "沖沖沖";
    System.out.println(name);
    
  }      

🌂如果想要比較兩個字元串:可以使用a.equals(b)或b.equals(a);傳回一個布爾類型;

🌂另外如果報錯資訊出現NullPointerException則考慮是空對象;

4.2冒泡排序(參考曾經學c的思路)      
package demo;

public class Tst_3 {

  public static void main(String[] args) {
    int[] a = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};
      int n;  //存放數組a中元素的個數
      int buf;  //交換資料時用于存放中間資料
    for(int i=0;i<a.length-1 ;i++) {
      for(int j=0;j<a.length-i-1;j++) {
        if(a[j]<a[j+1]) {
          buf = a[j];
          a[j] = a[j+1];
          a[j+1] = buf;
        }
      }
    }
    for(int x:a) {
      System.out.println(x);
    }
  }

}      
package demo;
import java.util.Random;
public class Tst_4 {

  public static void main(String[] args) {
    Random random = new Random();
    int buf;
    int[] nums = new int[random.nextInt(10)];
    for(int i=0;i<nums.length;i++) {
      nums[i] = random.nextInt(100);  
    }
    for(int i=0;i<nums.length-1 ;i++) {
      for(int j=0;j<nums.length-i-1;j++) {
        if(random.nextBoolean()) {
          buf = nums[j];
          nums[j] = nums[j+1];
          nums[j+1] = buf;
        }
      }
    }
    for(int x:nums) {
      System.out.println(x);
    }
}

}