java面試之數組基礎溫習

數組的概念

是由多個相同類型的元素按照一定的順序排列的數據集合,可以通過整數下標訪問數組中的值。例如a是一個整數類型的數組,a[i]就是數組下標爲i的整數。

數組的定義

數組在聲明的時候必須指定其類型和數組名稱,數組初始化有兩種即靜態初始化、動態初始化。下面聲明瞭一個int類型靜態初始化的數組。

int[] a = {1,2,3,4,5,6};

亦可以像下面動態初始化長度爲10的int類型數組。

int[] arr = new int[10];

arr數組被創建的時候,所有的元素默認初始化爲0,如果是boolean
數組默認爲false而對象數組元素則初始化爲null。需要注意的是:數組本身是引用數據類型,數組元素即可以是基本數據類型也可是引用數據類型。如下聲明瞭一個引用數據類型的數組。

String[] args = new String[10];

特別注意的是,當試圖訪問args[10]數組元素時將會引發Array index out of bounds 的異常。數組創建的時候將會在內存中開闢一個連續的空間,所以我們可以通過索引訪問數組元素,而且數組創建完畢後,其長度也不能被改變。

數組的內存分析

int[] arr = new int[4];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;

數組內存分析如下圖所示;
在這裏插入圖片描述

數組面試題

  1. 華夏花城短租半年,780元/每月,有空調、有網絡、獨立衛生間,廚房齊全。屋內均爲IT人士,所以要求來租者最好是剛畢業的年輕人。
 public static void main(String[] args) {
       int[] arr = {8, 2, 1, 0, 3};
       int[] index = {2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3};
       String telephone = "";
       for (int i = 0; i < index.length; i++) {
           telephone += arr[index[i]];    
       }
       System.out.println("聯繫方式:" + telephone);
   }
  1. 請用scanner類輸入5個學生的成績並輸出最大的學生的成績
 public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("請輸入學生個數");
       int num = scanner.nextInt();
       System.out.println("請輸入學生成績");
       int[] arr = new int[num];
       for (int i = 0; i < arr.length; i++) {
           arr[i] = scanner.nextInt();
       }
       // 獲取最大值
       int max = 0;
       for (int i = 0; i < arr.length; i++) {
           if (max < arr[i]) {
               max = arr[i];
           }
       }

       System.out.println("學生最大成績爲:" + max);
   }
  1. 請輸出99乘法表
       public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i * j+" ");
            }
            System.out.println();
        }
    }
    
  2. 請輸出1-100以內的質數。
  public static void main(String[] args) {
       // 輸出1到100以內的質數(除了能被1和本身進行整除)
       for (int i = 2; i < 101; i++) {
           boolean flag = false;
           for (int j = 2; j < i; j++) {
               // 即能被整除
               if (i % j == 0) {
                   flag = true;
               }
           }
           // 如果是質數:內循環的第一個if判斷將會執行,flag爲true
           if (flag) {
               System.out.println(i);
           }
       }
   }
}
  1. 任意輸出兩個數,並求其最大公約數和最小公倍數,提示最大公約數與最小公倍數的乘積即爲兩個數之積。

  public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("請輸入兩個數");
       int m = scanner.nextInt();
       int n = scanner.nextInt();
       int i = getNum(m, n);
       int j = getNumSub(m, n);
       System.out.println("最小公約數爲:" + i + "最大公倍數爲:" + m * n / i);
       System.out.println("最小公約數爲:" + j + "最大公倍數爲:" + m * n / j);

   }

   /**
    * 思路:先獲取兩個數最大的,判斷兩個數分別相除從最大數開始每次遞減的數組
    * 若能出現剛剛好能被第一個數整除即爲最大公約數
    */
   public static int getNum(int m, int n) {
       int max = m > n ? m : n;
       int num = 1;
       for (int i = max; i > 0; i--) {
           if (m % i == 0 && n % i == 0) {
               num = i;
               break;
           }

       }

       return num;
   }
   
   /**
    輸入兩整數m和n(m>=n)
    1)m%n 得出餘數,
    2)若餘數爲0,則 n 即爲兩數的最大公約數
    3)若餘數不爲0,則 m=n,n=餘數,再執行第1步。
    */
   public static int getNumSub(int m, int n) {
       if (m < n) {
           int temp = n;
           n = m;
           m = temp;

       }
       if (m % n != 0) {
           return getNum(n, m % n);
       }

       return 1;
   }
  1. 請寫出冒泡程序和選擇程序
  public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("請輸入數組長度");
       int i = scanner.nextInt();
       int[] arr = new int[i];
       for (int j = 0; j < arr.length; j++) {
           int random = (int) (Math.random() * 100);
           arr[j] = random;
       }
       System.out.println("生成的數組:" + Arrays.toString(arr));

       chooseSort(arr);
       bubbleSort(arr);

   }

   public static void chooseSort(int[] arr) {
       // 選擇排序,每一次可以確保最大的在最後面
       for (int j = 0; j < arr.length; j++) {
           for (int k = j + 1; k < arr.length; k++) {
               if (arr[j] > arr[k]) {
                   int temp = arr[j];
                   arr[j] = arr[k];
                   arr[k] = temp;
               }
           }
       }

       System.out.println(Arrays.toString(arr));
   }

   /** 冒泡排序
    * 外層循環控制循環次數
    * 內層循環實際進行比較
    */
   public static void bubbleSort(int[] arr) {
       for (int i = 0; i < arr.length; i++) {
           for (int j = 0; j < arr.length - 1 - i; j++) {
               if (arr[j] > arr[j + 1]) {
                   int temp = arr[j];
                   arr[j] = arr[j + 1];
                   arr[j + 1] = temp;
               }

           }
       }

      System.out.println(Arrays.toString(arr));

目前遇到的數組面試題大概就是這麼多,後面遇到還會繼續更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章