JAVA进阶开发之(二维数组)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                JAVA进阶开发之(二维数组)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1、二維數組其實是一個特殊的一維數組,特殊在這個二維數組中每一個元素是一個一維數組
?
2、就是一維數組里面都是一樣的元素,二維數組就是把元素換成了一維數組
?
3、實際開發中,使用最多的就是一維數組,二維數組很少使用,三維數組幾乎不用
?
4、二維數組靜態初始化
int[][] a={{1,2},{3,4},{5,6}};?
5、把二維數組看成矩陣
?
6、關于二維數組中元素的讀和改
a[0][0]表示第1個一維數組中的第1個元素
a[1][100]表示第2個一維數組中的第101個元素
?
7、二維數組的遍歷
package com.lbj.javase.array;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/2/18 23:00* @Copyright 公司*/ public class ArrayTest09 {public static void main(String[] args) {int[][] a={{1,2},{3,4},{5,6}};System.out.println(a.length);System.out.println(a[0].length);System.out.println("=======================");//遍歷循環二維數組for (int i = 0; i <a.length ; i++) {for (int j = 0; j <a[i].length; j++) {System.out.println(a[i][j]);}}} }?
8、動態初始化二維數組
int[][] array=new int[3][4];
動態初始化了一個3行4列的二維數組
?
9、String數據類型
String s=new String("123");
等同于
String s="123";
因為String類型在java中受到優待
?
?
演示例子加強記憶:
package com.lbj.javase.array;/** 練習編寫程序,使用一維數組,模擬棧數據結構要求:1、這個棧可以存儲java中任何引用類型的數據2、在棧中提供push方法模擬壓棧(棧滿了,要有提示信息)3、在棧中提供pop方法模擬彈棧(棧空了,也要有提示信息)4、編寫測試程序,new棧對象,調用push pop 方法來模擬彈棧壓棧的動作5、假設棧的默認初始化容量是10(請注意無參構造方法的編寫方式)*/ public class ArrayTest10 {private Object[] elements;//需要有一個棧幀,這個棧幀,永遠指向棧頂部元素[0]//注意:最初的棧是空的,一個元素也沒有//那么這個默認的初始值是多少?//如果index采用0,表示棧幀指向頂部元素的上方。相當于空的指向//如果index采用-1,表示棧幀指向頂部元素private int index;public ArrayTest10(){//假設棧的默認容量是10,那么一維數組動態初始化的固定長度就等于10//因為實例變量初始化的時候是構造方法在執行的時候,所以構造方法中初始化和外邊初始化效果是一樣的this.elements=new Object[10];//給index賦值this.index=-1;}//壓棧方法//obj是被壓入的元素public void push(Object obj){if(this.index>=this.elements.length-1){System.out.println("壓棧失敗,棧滿");//如果return語句執行,整個方法就應該結束return;}//承接上面的return語句,如果程序能走到這里,說明棧沒滿this.index++;this.elements[index]=obj;//obj其實是obj.toString 說了很多次 在System.out.println中會自動調用toString方法System.out.println("壓棧"+obj+"成功,棧幀指向"+index);}//彈棧的方法,從數組中往外面取元素,每取一個,棧幀減一public Object pop(){if(this.index<0){System.out.println("棧空,彈棧失敗");return null;}//程序執行到此處說明棧沒有空System.out.println("彈棧"+elements[index]+"成功");//棧幀向下移動一位this.index--;System.out.println("棧幀指向"+index);return null;}//set和get也許使用不上,但是你必須寫上,這是規矩//封裝:第一步 屬性私有化 第二步 對外提供get和set方法public Object[] getElements() {return elements;}public void setElements(Object[] elements) {this.elements = elements;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;} }補充main方法:
package com.lbj.javase.array;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/2/21 16:41* @Copyright 公司*/ public class MyStackTest01 {public static void main(String[] args) {//new 是把構造方法實例化//也就是意味著 創建一個棧對象,初始化容量是10個ArrayTest10 arrayTest10=new ArrayTest10();//調用方法壓棧arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());arrayTest10.push(new Object());//最后壓入的,最先彈出來//壓到這個元素的時候失敗了arrayTest10.push(new Object());//調用方法彈棧//彈棧顧名思義我們需要獲取些什么//Object ele=arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();arrayTest10.pop();//彈出的時候,此時棧空了arrayTest10.pop();} }運行結果:
?
酒店管理系統模擬程序實例:
?Hotel類:
package com.lbj.javase.array;/** 酒店對象,酒店中有二維數組,用二維數組模擬酒店*/ public class Hotel {//二維數組,模擬酒店所有房間private Room[][] rooms;//通過構造方法蓋樓初始化酒店public Hotel() {//動態初始化,每個房間相當于畫好圖紙,造出框架,里面是空的rooms = new Room[3][10];//接下來就是將每個房間進行裝修,也就是說實例化這數組里面30個空間for (int i = 0; i < rooms.length; i++) { //i是下標,i+1是樓層for (int j = 0; j < rooms[i].length; j++) {if (i == 0) {rooms[i][j] = new Room((i + 1) * 100 + j + 1, "單人間", true);//房子建好的時候都是空閑的} else if (i == 1) {rooms[i][j] = new Room((i + 1) * 100 + j + 1, "標準間", true);//房子建好的時候都是空閑的} else if (i == 2) {rooms[i][j] = new Room((i + 1) * 100 + j + 1, "豪華間", true);//房子建好的時候都是空閑的}}}}//在酒店對象上提供一個打印房間列表的方法public void print() {for (int i = 0; i <rooms.length; i++) {//里面的for循環負責輸出一層for (int j = 0; j <rooms[i].length; j++) {Room room=rooms[i][j];System.out.print(room);}//換行,注意 這里是printlnSystem.out.println();}}/*** 在酒店對象上提供一個訂房的方法給其前臺* @param roomNo 調用此方法時需要傳遞一個房間編號過來,這個編號是前臺小姐姐輸入的*/public void order(int roomNo){//訂房最主要是將房間對象的status修改為false//假設房間的編號是207 可以推導出room[1][6]Room room = rooms[roomNo/100 -1][roomNo%100 -1];room.setStatus(false);System.out.println(roomNo+"已經訂房成功");}/*** 退房* @param roomNo*/public void exit(int roomNo){Room room = rooms[roomNo/100 -1][roomNo%100 -1];room.setStatus(true);System.out.println(roomNo+"已經退房成功");} }?
?
HotelMySystem類:
package com.lbj.javase.array;import java.util.Scanner;/** 為某個酒店編寫程序,酒店管理系統,模擬訂房,退房,打印所有房間狀態等功能1、該系統的用戶是:酒店前臺2、酒店使用一個二維數組來模擬3、酒店中的每一個房間應該是一個java對象4、每一個房間Room應該有:房間編號、房間類型、房間是否空閑5、系統應該對外提供的功能:可以預定房間:用戶輸入房間編號,訂房可以退房:用戶輸入房間編號,退房可以查看所有房間的狀態:用戶輸入某個指令應該可以查看所有房間狀態*/ public class HotelMySystem {public static void main(String[] args) {//創建酒店對象Hotel hotel = new Hotel();//接下來就是進入酒店管理系統System.out.println("歡迎使用酒店管理系統,請認真閱讀以下使用說明");System.out.println("鍵盤位置輸入[1]表示查看房間列表,[2]表示預定房間,[3]表示退訂房間,[4]表示退出系統");//調用鍵盤輸入的功能Scanner scanner=new Scanner(System.in);//如果不使用循環的話就會導致系統用完一次必須退出,這在實際開發中是不現實的,因此需要使用循環//這是一個死循環,因此可以一直輸入使用,除非輸入的條件是4,那么就是退出循環體while (true){System.out.println("請輸入對應功能編號");//接收功能編號存儲到變量i中int i= scanner.nextInt();if(i==1){hotel.print();}else if(i==2){System.out.println("請輸入預定的房間編號");//接收房間編號存儲到變量roomNo中int roomNo=scanner.nextInt();hotel.order(roomNo);}else if(i==3){System.out.println("請輸入退訂的房間編號");int roomNo=scanner.nextInt();hotel.exit(roomNo);}else if (i==4){System.out.println("再見,歡迎您再次使用本系統");return;}else{System.out.println("您輸入的是非法字符,無法匹配");}}}}?
Room類:
package com.lbj.javase.array;import java.util.Objects;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/2/22 13:41* @Copyright 公司*/ public class Room {/*房間號1樓:101 102 103 104 105 106...2樓:201 202 203 204 205 206...3樓:301 302 303 304 305 306...*/private int no;/*房間類型標準單間、雙人房、總統套房*/private String type;/*房間狀態true表示空閑false表示有人入住*/private boolean status;//構造方法public Room(){}//有參構造方法public Room(int no, String type, boolean status) {this.no = no;this.type = type;this.status = status;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isStatus() {return status;}public void setStatus(boolean status) {this.status = status;}//equals方法重寫//equals是用來比較兩個對象是否相同//至于怎么比較,默認情況下是比較內存地址,因此我們程序員要自己定義//任務兩個房間編號相同,就表示是同一個房間//ctrl+點擊Object可以進入Object類中,然后再ctrl+f12查詢方法@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Room room = (Room) o;return no == room.no && status == room.status && Objects.equals(type, room.type);}@Overridepublic int hashCode() {return Objects.hash(no, type, status);}//toString方法重寫//toString方法的目的就是將java對象轉換成字符串形式//至于怎么轉,轉換成什么格式,程序員自己定//我不要看對象內存地址,我要看具體信息(父類的toString是寫出一個內存地址) // public String toString() { // return "房間號,房間類型,房間狀態";//這樣會寫死程序 // }//動態(把一個變量塞到一個字符串當中,口訣:加一個雙引號,雙引號中間加兩個)@Overridepublic String toString() {return "Room{" +"no=" + no +", type='" + type + '\'' +", status=" + (status?"空閑":"占用") +'}';} }?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的JAVA进阶开发之(二维数组)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 依赖第三方库时出现的问题:Manifes
 - 下一篇: c 字符串数组_在C++中将字符串转换为