黑馬程式員----java學習筆記之數組、二維數組,附相關面試題

來源:互聯網
上載者:User

標籤:二維數組   數組   java面試題   用java輸出楊輝三角   

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------

一:數組(掌握)

(1)數組:儲存同一種資料類型的多個元素的容器。
(2)特點:每一個元素都有編號,從0開始,最大編號是長度-1。
        編號的專業叫法:索引
(3)定義格式
A:資料類型[] 數組名;
B:資料類型 數組名[];

推薦是用A方式,B方法就忘了吧。如定義一個int數組。 int[] a.
但是要能看懂
(4)數組的初始化
A:動態初始化
只給長度,系統給出預設值

舉例:int[] arr = new int[3];
B:靜態初始化
給出值,系統決定長度

舉例:int[] arr = new int[]{1,2,3};
簡化版:int[] arr = {1,2,3};
(5)Java的記憶體配置
A:棧 儲存局部變數
B:堆 儲存所有new出來的
C:方法區(物件導向部分詳細講解)
D:本地方法區(系統相關)
E:寄存器(CPU使用)

注意:
a:局部變數 在方法中或者方法聲明上定義的變數。
b:棧記憶體和堆記憶體的區別
棧:資料使用完畢,就消失。
堆:每一個new出來的東西都有地址
   每一個變數都有預設值
byte,short,int,long 0
float,double 0.0
char ‘\u0000‘
boolean false
參考型別 null

   堆記憶體中的資料使用完畢後,並沒有立即回收,會在記憶體回收行程閒置時候回收。

棧記憶體和堆記憶體的圖解


(6)數組記憶體配置圖
A:一個數組
B:二個數組
C:三個數組(兩個棧變數指向同一個堆記憶體)
(7)數組的常見操作
A:遍曆
方式1:
public static void printArray(int[] arr) {
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}

方式2:
public static void printArray(int[] arr) {
System.out.print("[");
for(int x=0; x<arr.length; x++) {
if(x == arr.length-1) {
System.out.println(arr[x]+"]");
}else {
System.out.println(arr[x]+", ");
}
}
}
B:最值
最大值:
public static int getMax(int[] arr) {
int max = arr[0];

for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}

return max;
}

最小值:
public static int getMin(int[] arr) {
int min = arr[0];

for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}

return min;
}
C:逆序
方式1:
public static void reverse(int[] arr) {
for(int x=0; x<arr.length/2; x++) {
int temp = arr[x];
arr[x] = arr[arr.length-1-x];
arr[arr.length-1-x] = temp;
}
}

方式2:
public static void reverse(int[] arr) {
for(int start=0,end=arr.length-1; start<=end; start++,end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
D:查表
public static String getString(String[] strArray,int index) {
return strArray[index];
}
E:基本尋找
方式1:
public static int getIndex(int[] arr,int value) {
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
return x;
}
}

return -1;
}

方式2:
public static int getIndex(int[] arr,int value) {
int index = -1;

for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
index = x;
break;
}
}

return index;
}

二維數組(理解)
(1)元素是一維數組的數組。
(2)格式:
A:資料類型[][] 數組名 = new 資料類型[m][n];//數組的動態初始化。 
B:資料類型[][] 數組名 = new 資料類型[m][];//沒有給出一維數組元素的個數,可以動態給出。
C:資料類型[][] 數組名 = new 資料類型[][]{{...},{...},{...}};
D:資料類型[][] 數組名 = {{...},{...},{...}};

例:int[] x,y[];其中x是一維數組,y是二維數組。代碼其實相當於 int[] x;  int[] y[];


(3)相關面試題(掌握):

A:用二維數組輸出:楊輝三角形

代碼如下

/*需求:列印楊輝三角形(行數可以鍵盤錄入)11 11 2 11 3 3 11 4 6 4 1 1 5 10 10 5 1分析:看這種映像的規律A:任何一行的第一列和最後一列都是1B:從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。步驟:A:首先定義一個二維數組。行數如果是n,我們把列數也先定義為n。  這個n的資料來自於鍵盤錄入。B:給這個二維數組任何一行的第一列和最後一列賦值為1C:按照規律給其他元素賦值從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。D:遍曆這個二維數組。*/import java.util.Scanner;class Array2Test3 {public static void main(String[] args) {//建立鍵盤錄入對象Scanner sc = new Scanner(System.in);//這個n的資料來自於鍵盤錄入。System.out.println("請輸入一個資料:");int n = sc.nextInt();//定義二維數組int[][] arr = new int[n][n];//給這個二維數組任何一行的第一列和最後一列賦值為1for(int x=0; x<arr.length; x++) {arr[x][0] = 1; //任何一行第1列arr[x][x] = 1; //任何一行的最後1列}//按照規律給其他元素賦值//從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。for(int x=2; x<arr.length; x++) {//這裡如果y<=x是有個小問題的,就是最後一列的問題//所以這裡要減去1//並且y也應該從1開始,因為第一列也是有值了for(int y=1; y<=x-1; y++) {//每一個資料是它上一行的前一列和它上一行的本列之和。arr[x][y] = arr[x-1][y-1] + arr[x-1][y];}}//遍曆這個二維數組。/*for(int x=0; x<arr.length; x++) {for(int y=0; y<arr[x].length; y++) {System.out.print(arr[x][y]+"\t");}System.out.println();}*///這個時候,要注意了,內迴圈的變化必須和曾經講過的九九乘法表類似for(int x=0; x<arr.length; x++) {for(int y=0; y<=x; y++) {System.out.print(arr[x][y]+"\t");}System.out.println();}}}

B:二維數組的求和

代碼如下

/*公司年銷售額求和某公司按照季度和月份統計的資料如下:單位(萬元)第一季度:22,66,44第二季度:77,33,88第三季度:25,45,65第四季度:11,66,99分析:A:把題目的資料用二維數組來表示int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};B:如何求和呢?求和其實就是擷取到每一個元素,然後累加即可。C:定義一個求和變數sum,初始化值是0。D:通過遍曆就可以得到每一個二維數組的元素。E:把元素累加即可。F:最後輸出sum,就是結果。*/class Array2Test2 {public static void main(String[] args) {//把題目的資料用二維數組來表示int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};//定義一個求和變數sum,初始化值是0。int sum = 0;//通過遍曆就可以得到每一個二維數組的元素。for(int x=0; x<arr.length; x++) {for(int y=0; y<arr[x].length; y++) {//把元素累加即可。sum += arr[x][y];}}//最後輸出sum,就是結果。System.out.println("一年的銷售額為:"+sum+"萬元");}}

C:二維數組的遍曆

代碼如下

/*需求:二維數組遍曆外迴圈控制的是二維數組的長度,其實就是一維數組的個數。內迴圈控制的是一維數組的長度。*/class Array2Test {public static void main(String[] args) {//定義一個二維數組int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};//請問誰代表{1,2,3}//arr[0]就是第一個數組//arr[0] = {1,2,3};for(int x=0; x<arr[0].length; x++) {System.out.println(arr[0][x]);}System.out.println("--------------");for(int x=0; x<arr[1].length; x++) {System.out.println(arr[1][x]);}System.out.println("--------------");for(int x=0; x<arr[2].length; x++) {System.out.println(arr[2][x]);}System.out.println("--------------");//用迴圈改進for(int x=0; x<3; x++) {for(int y=0; y<arr[x].length; y++) {System.out.print(arr[x][y]+" ");}System.out.println();}System.out.println("--------------");//這個時候,注意了,3是我們根據上面的代碼得出來的//但是,它不能針對任何的數組都可以這樣//所以,我們應該想辦法改進//其實,外面的這個迴圈的長度就是二維數組的長度for(int x=0; x<arr.length; x++) {for(int y=0; y<arr[x].length; y++) {System.out.print(arr[x][y]+" ");}System.out.println();}System.out.println("--------------");//用方法改進//調用方法printArray2(arr);System.out.println("--------------");//我們再來一個列數是變化的int[][] arr2 = {{1,2,3},{4,5},{6}};printArray2(arr2);}/*需求:遍曆二維數組兩個明確:傳回值類型:void參數列表:int[][] arr*/public static void printArray2(int[][] arr) {for(int x=0; x<arr.length; x++) {for(int y=0; y<arr[x].length; y++) {System.out.print(arr[x][y]+" ");}System.out.println();}}}

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------

黑馬程式員----java學習筆記之數組、二維數組,附相關面試題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.