發表文章

目前顯示的是 1月, 2008的文章

道聽胡說: C與函式

據說老舊的C語言程式,在編譯時並不會檢查函式的參數型態,因此才沒有函式的Overloading(多載)。 所以,老舊 C 函式才不能寫這樣的宣告 int max(int a, int b) { ... } long max(long a,long b) { ... } float max(float a,float b) { ... } 而下面這種函式的寫法,據說是後來加上去的函式型態檢查而產生的 int max (a , b)   int a;   int b; {   ... } 不過,我倒是認為上面這種宣告,其實也很不錯!讓初學者認為參數其實就等同於宣告變數。

Java筆記:CheckboxMenuItem 的 setState 方法

CheckboxMenuItem 此類別只會觸發ItemEvent,永遠不會觸發ActionEvent,詳情請看JDK程式碼。ItemEvent與ActionEvent是同一層的物件,都繼承自AWTEvent。 CheckboxMenuItem 的 setState(boolean b),這個函數並不會觸發ItemEvent。唯一會觸發ItemEvent的是與使用者互動,JDK說明 見此 ,因此在ItemListener中可以很大方的使用setState,不用考慮太多事情。 那麼,假如setState會觸發ItemEvent的話又怎樣呢? 我們將不能在ItemListener中使用setState,不然可能會造成無止境的遞迴。 如下程式碼所示,這段程式碼式不讓CheckboxMenuItem被取消選取,永遠設定為選取狀態。 import java.awt.*; import java.awt.event.*; class AssumeTriggerThenRecurcive implements ItemListener {   public void itemStateChanged(ItemEvent e) {     if (e.getSource() instanceof CheckboxMenuItem) {       ((CheckboxMenuItem)e.getSource()).setState(true);     }   } } 當setState(true);被執行,將觸發ItemEvent,itemStateChanged就又被執行,又進入到setState(true);,因此無限遞迴就產生了。

Java Puzzlers: 字串物件的特殊性11,67

請問這兩個的輸出結果各是什麼? System.out.println("A"+"B"); System.out.println('A'+'B'); from Java Puzzlers 結果:上面輸出的結果是是AB,下面的是則不是AB,而是印出131。 Java字串的加法,是會將兩個字串合起來,然而,字元的加法就沒有這樣的規則,而是運用了整數運算,將'A'與'B'的code number相加起來,產生131的結果。 而我們可以利用""(空字串)將整個運算式變成字串與字元的加法,也就是字串加入一個字元,就能使字元輸出成AB。若是要銜接非常多的字串,不建議使用Java緩慢的字串加法,請以StringBuffer或StringBuilder替代之。 System.out.println(""+'A'+'B'); 你還可以試試看下面的程式碼 int foo = 1234 , foo2 = 4321; System.out.println(foo + foo2); System.out.println(""+ foo + foo2); 當你要弄一個複雜的輸出,就有必要用括號處理你所想要的結果,或是使用JDK5.0後有的printf,利用如同C語言的printf方法,進行格式化輸出。 int foo = 1234 , foo2 = 4321; System.out.println("add=>"+ (foo + foo2) +" concat=>"+foo+foo2); 結論 套一句Java Puzzlers作者的話 When using the string concatenation operator, always parenthesize nontrivial operands. 當你使用字串連接運算時,永遠要用小括號將重要的運算式包起來。 Puzzlers 67: All Strung Out 我們創造了一個我們自己的String,打算取代原本的String 你覺得...

小程式:fake-ddns service part

因為家裏的IP是動態的,所以很不方便直接記IP到學校用遠端桌面。下面這隻PHP程式,是我fake-ddns的服務端,放置在固定IP的伺服器上,主要功能是儲存IP與看IP。 fake-ddns另外還有一個部份是客戶端,用來更新IP,由於我只是寫給我自己用的,所以你也看到了是個小程式。當然,經過修改後就能多人使用甚至是註冊會員之類的,只是我並不需要這麼多功能,然而我只是想要用遠端桌面。 改天到 自由軟體鑄造場 開個專案好了(笑) 由於直接公開程式碼遭遇技術上困難,所以請到 這裡 看程式碼。

Matlab小程式:圖片選取程式

圖片
練習使用Matlab的對話框,並與有的沒的指令結合順便紀錄用法。 展示圖 程式碼 clc; clear; % 取得圖片所在的目錄 images_dir = uigetdir('.','Choose a directory for images'); if images_dir == 0, return; end % 檢查目錄存在否 chk_code = exist(images_dir,'dir'); if chk_code ~= 7 msg = sprintf('''%s''not exit or not a directory\n', in_dir); errordlg(msg, 'Are you sure?'); return; end % 搜尋檔案並統計 file_list = dir(fullfile(images_dir, '*.jpg')); file_list_num = size(file_list); if file_list_num(1) <= 0 msg = sprintf('Can not find any JPEG image in this directory.\n'); msgbox(msg, 'Are you kidding?'); return; end msg = sprintf('Total JPEG image number:%d\n', file_list_num(1)); uiwait(msgbox(msg, 'Scanning images finished')); % 列出檔案名稱給使用者選擇 file_list_names = {file_list.name}; pushbtn = 1; while pushbtn == 1 [selindx,pushbtn] = listdlg('SelectionMode', 'single',... 'PromptString', 'Select image to show...