[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 意見:
張貼留言