目前在學習軟件構造課程中表驅動法的內容,了解后覺得它在處理涉及多個if-else問題時十分有用,下面提供一些簡單的我對表驅動法的理解以及其在java中應用的小例子。
表驅動法,顧名思義,是用查表方式來獲取數據,涉及到了表的結構。表是一種在很多語言中常見的數據結構,比如在java中我們使用map鍵值對集合的形式來定義表。關於java中map的用法如下:
創建: Type map = new HashMap(); 刪除: map.clear(); 添加鍵值對: map.set(key,value); 取出謀鍵對應的值: map.get(key) 循環遍歷取出所有鍵值對: for(Object obj : map.keySet()){ map.get(obj ); }
表驅動法查找方式包括直接訪問,索引訪問與階梯訪問。
直接訪問的方式是通過下標直接找到對應的數據內容,這種方式一般只需要使用數組這種數據結構。舉個簡單的例子如下:
static String []week = {"星期一","星期二","星期三","星期四","星期五","星期六","星期七"}; int daytime = 3; String dayName = week[daytime--]; System.out.print(dayName);
//dayName = "星期三";
索引訪問的方式適用於我們日常生活查找簡單的表的情景,查找的條件不直觀。比如我們要通過程序模擬一本漢語字典,查找拼音為"hao"的漢字,拼音"hao"是字符串,沒有字典頁碼的數字形式直觀,無法作為數組下標,在java中這時使用map比較合適,將拼音作為鍵,值為對應的漢字等等。下面是另一個簡單的例子:
static String []week = {"星期一","星期二","星期三","星期四","星期五","星期六","星期七"}; static String []plan = {"學習課程","練習棒球","鋼琴演奏","戶外寫生","與家人野餐","外出購物","整理房間"}; static Map<String,String> dayplan = new HashMap(); for(int i =0;i<week.length;i++){ dayplan.put(week[i],plan[i]); } String Wednesdayplan =dayplan.get("星期三"); System.out.print(Wednesdayplan); //Wednesdayplan = "鋼琴演奏"
最后是階梯訪問,也稱為分段訪問,是通過對某表中數據分段,根據分段上限再進行查找的過程。應用在我們日常生活中比較常見的是績點查詢。比如你某門課分數為82,你想查詢這門課考試成績的GPA,你將會在兩張表中查詢。首先你需要再一張績點對應分數上限的表中查找最接近你分數的分數上限:84,然后通過上限85分查找到對應的績點為3.3。以下為源代碼:
static int []Range = {59,64,74,84,89,100}; static Double []GPA = {0.,1.,2.,3.3,3.7,4.}; double gpa = 0; int grades = 82; for(int i=0;i<Range.length;i++){ if(grades<=Range[i]){ gpa = GPA[i]; break; } } system.out.print(gpa); //gpa = 3.3
That's all~Thank you!