[Java]ArrayList 集合物件化
前文回顧:Read file & ArrayList & String型態陣列轉換
這篇之前寫的網誌,有提到在處理一個檔案的時候應該要怎麼寫會比較好
經過一學期的磨練,發現到自己之前寫的這篇,寫法上較沒有彈性
也沒有真正的落實 Java 物件化的觀念
以及沒有展示出物件化強大的地方 和 ArrayList的好用之處
想想,假設今天我們要讀近來的一個檔案
內文有 <學生姓名 數學成績 英文成績>
顯然的,學生姓名我們會希望用String來儲存
數學成績跟英文成績會想要用 double或int來儲存,因為可能會對這些成績做加總運算
或是由高到低的排序運算
這時候如果用之前的方法,必須要再多寫一個for迴圈轉 型態
並且在處理上會沒有較多的彈性空間
所以以下附上我的Source code
並且說明ArrayList物件化的概念
<Step>
<開發環境:Eclipse>
<程式架構>
在這邊我新增兩個java檔
一個是Main -->寫主要執行的地方
一個是Member -->顧名思義這邊是讓我放Class的成員宣告
另外我有寫檔的動作
自己的測試檔 test.txt範例如下
Alex 97.4 80.5 Bob 56.7 99.0 Tony 70.5 88.6 Cindy 83.5 69.8
<Member.java>
public class Member { /* 因為讀進檔案的格式是<學生姓名 數學成績 英文成績> 所以分別對應到的型態是 <String double double> 宣告private的原因是希望不要讓別人隨便改到此值 */ private String m_name; //姓名 private double m_math; //數學成績 private double m_english; //英文成績 /* 因為型態已經是private,如果要改值的話,就宣告一個 set Method來改我們想要的值 取值的話再用get Method來取得 */ public void setName(String name){ m_name = name; } public void setMath(double math){ m_math = math; } public void setEng(double eng){ m_english = eng; } public String getName(){ return m_name; } public double getMath(){ return m_math; } public double getEng(){ return m_english; } }<Main.java>
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new FileReader("test.txt")); //將讀檔從兩行寫成一行,更清楚簡潔 String line = null; ArrayList<Member> myList = new ArrayList<Member>(); //在ArrayList中,<> 看成是一個容器,今天這個容器裡面裝的是 Member這個Class //所以在這個myList所擁有的性質就會有 Member這個Class裡面的成員,就可以使用我們宣告的Method while((line=br.readLine())!=null){ Member m = new Member(); //每一次都要重新宣告新的物件 m.setName(line.split("\\s")[0]); //以空白切開,將切開後的第一個丟到setName m.setMath(Double.parseDouble(line.split("\\s")[1])); //以空白切開,將切開後的第二個丟到setMath m.setEng(Double.parseDouble(line.split("\\s")[2])); //以空白切開,將切開後的第三個丟到setEng myList.add(m); //當while迴圈值型結束,也就將整個檔案內容讀完,一一的放到myList這個動態陣列裡面了 } System.out.println("Size:"+myList.size()); System.out.println(myList.get(3).getName()); System.out.println(myList.get(3).getMath()); System.out.println(myList.get(3).getEng()); } }
接著show出 output結果
Size:4 Cindy 83.5 69.8
跟之前的版本相比
現在這篇簡潔了許多
彈性空間也增加了不少
例如: 如果老師今天想要加一位同學分數
我們可以在Member這個Class裡面新增一個 addgrade( ) Method
或是想要對學生成績做大到小的排序
都可以直接寫在Member.java裡面
之後會再一一介紹 :)
0 意見:
張貼留言