數組的概念
是由多個相同類型的元素按照一定的順序排列的數據集合,可以通過整數下標訪問數組中的值。例如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;
數組內存分析如下圖所示;
數組面試題
- 華夏花城短租半年,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);
}
- 請用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);
}
- 請輸出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(); } }
- 請輸出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);
}
}
}
}
- 任意輸出兩個數,並求其最大公約數和最小公倍數,提示最大公約數與最小公倍數的乘積即爲兩個數之積。
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;
}
- 請寫出冒泡程序和選擇程序
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));
目前遇到的數組面試題大概就是這麼多,後面遇到還會繼續更新。