[Java] 陣列的排序

在演算法中,常見的排序方法不外乎有泡沫排序法(Bubble Sort)、插入排序法(Insertion Sort)、 合併排序法(Merge Sort)、謝耳排序法(Shell Sort)、二元樹排序法(Binary Tree Sort)、堆積排序法(Heap Sort)、快速排序法(Quick Sort)及基數排序法(Radio Soft)等等。而海芋在這不是要教大家寫一個排序的演算法,而是要告訴大家,如何排序一個陣列中的元素呢?

在「陣列的比較」一文中曾經提到Arrays這個類別,在它之中還內建一個sort的method,可以讓您的資料由小到大遞增排序。

說了這麼多,怎麼用呢?用一個程式碼來說明吧。

char []passwordArray = {'H','I'};
compareResult = Arrays.sort(passwordConfirmArray);

而在這個method中,他僅僅提供由小到大的排序,至於由大到小的排序,可能您就要自己寫囉!而如果您能發展出一套演算法,比Sun的演算法快,就算只快0.01秒,那麼海芋勸您現在就起身離開電腦,趕快去申請一個專利吧!

[Java] 陣列的比較

在Java這個程式語言中,若要比較兩個陣列的內容是否相等,要怎麼比較呢?其實在Arrays這個類別中,Java就已經幫你實作了,只要再呼叫Arrays這個類別中的euqals這個method就可以囉!

而讓我們先看一下equals這個method吧!

static boolean equals(boolean[] a, boolean[] a2)
static boolean equals(byte[] a, byte[] a2)
static boolean equals(char[] a, char[] a2)
static boolean equals(double[] a, double[] a2)
static boolean equals(float[] a, float[] a2)
static boolean equals(int[] a, int[] a2)
static boolean equals(long[] a, long[] a2)
static boolean equals(Object[] a, Object[] a2)
static boolean equals(short[] a, short[] a2)

Read More

程式設計中迴圈的 break 和 continue 之差異

在許多程式語言中,break和continue在迴圈的控制中,一直佔有非常重要的地位,他們不僅可以控制迴圈的執行,如果使用得當,也可以讓您的程式架構更加讓人容易明暸。而這兩個都是屬於忽略下列的運算式而直接跳出迴圈的,只不過continue還要再跳入迴圈做判斷,break則直接跳出迴圈。

 

舉一個例子來看好了。

for(int i=0;i<=5;i++)
        {
           if(i==2)
             continue;
           else if(i==4)
             break;
           System.out.println(i);
        }

 

此程式一開始會判斷 i 的值,因為一開始我們給定 i 的初始值為 0,所以在 if..else if 的地方,並不會符合條件式,這個情形一直持續到 i=2 為止。因為 i=2,已經符合我們的條件判斷式了,所以我們這時侯程式會執行 continue,並且忽略下面的的程式碼,重新回到迴圈做判斷,這時 i 會變3,再跳入迴圈中繼續執行程式碼。來到了 i=4 的地方,又符合我們的條件判斷式了,所以我們這時侯程式會執行break,同樣地,會忽略下面的的程式碼,但在此時就跳出迴圈了喔,所以整個迴圈就不再執行。

所以,根據以上的理論,您可以很輕易地知道這個迴圈要印出的結果為「0、1、3」。

但是,也有可能是在兩個 for 迴圈中有  break,舉例來說,如以下的程式碼,那麼會跳出那一個呢?

for(int i=0;i<=5;i++)
        {
            for (int j =0; j <= 5; j++)
            {
                if( j == 2)
                    continue;
                else if(j == 4)
                    break;
                System.out.println("i = "+ i + ", j = " + j);
            }
        }

 

我們就先直接執行程式碼,來看一下答案。

i = 0, j = 0
i = 0, j = 1
i = 0, j = 3
i = 1, j = 0
i = 1, j = 1
i = 1, j = 3
i = 2, j = 0
i = 2, j = 1
i = 2, j = 3
i = 3, j = 0
i = 3, j = 1
i = 3, j = 3
i = 4, j = 0
i = 4, j = 1
i = 4, j = 3
i = 5, j = 0
i = 5, j = 1
i = 5, j = 3

沒錯,當 break、continue 只會針對含有 break 、continue 的區塊做繼續或是跳出或是繼續判斷的動作。所以在使用 break、continue 關鍵字在多層迴圈的判斷時,必須特別小心!

遞增運算子(++) 與遞減運算子(–)

在許多程式語言中,遞增運算子(++) 與遞減運算子(–)在迴圈的使用上,一直佔有一席之地,原因無他,只是因為他非常好用,而在這裡先解釋一下他的用法。

當我們寫「x++」時,意味著我們將要進行「x=x+1」的運算;同理,當我們寫「x–」時,則是意味著我們將要進行「x=x-1」的運算。

而在以上的用法,就稱為後置(posfix)版本,或許聰明的您會想到,那前置(prefix)是什麼?

如果我們將「x++」改寫為「++x」時,我們還是會進行「x=x+1」的運算;同理,當我們寫「–x」時,則是意味著我們將要進行「x=x-1」的運算。

或許您會問,那後置和前置的用法,一樣囉?

答案並不盡然,這兩者差在運算的時間點不同,以一個例子來說好了。

<?
x=1;
print(x++);  // 1
print(x);    // 2
print(++x);  // 3
print(x);    // 3
?>

 

一開始,x的預設值為1,而在印出「x++」時,大多數的程式語言會先將x印出來,再進行「x=x+1」的動作,所以接下來的print(x),會秀出的結果是2。

 

在進行印出「++x」的動作時,大多數的程式語言會先將「x=x+1」進行運算,再進行印出x的動作。所以在此行,印出的結果就是3了。

 

如果以上的例子還不夠明白,那我們舉個比較生活化的例子好了。

 

如果我們有去超商買過東西,您可以先請店員先把商品包裝起來再結帳,也可以請店員先結帳再包裝商品,如果把「x=x+1」的動作比喻為店員結帳,而把商品包裝當作值的話,那麼「x++」就是屬於前者,「++x」就是屬於後者囉!

 

簡單來說,就是都有進行結帳的動作,但只是時間點的不同而已。

Short Circuit 與位元運算子

這篇是比較偏程式設計的內容,如果大家有興趣的話,不妨來看看吧!

 

一般來說,我們如果寫條件的比較時,都會用到邏輯比較符號和位元運算符號,然而,這到底有什麼差異呢?一般常見的邏輯比較符號有:「&&」、「||」,而位元運算符號則有「&」、「^」、「|」等幾種,當然每個符號都具有他的意義,而一般人最常搞不清楚的「&」、「&&」的差異,以及「|」、「||」的差別!

 

就一般我們常用的short circuit,是指「&&」和「||」這兩個,以下就以「&」和「&&」為例,來替大家講解一下差異。

 

假設我們現在有兩個變數A和B,分別代表True和False,則使用「B&A」來說,B和A都會分別被運算到,然後再來比較。而「B&&A」來說,只會運算到B,因為B是False,所以整個條件式都是錯的,就不會再計算下去了。

Read More

〔好書〕Blog部落格經營樂玩外掛大全

在海芋小站的交換連結中,看到了電腦玩物出了這本書,心中頓時覺得,該不會是一本改造Blog的書吧於是,在偶然的情況下,翻了一下這本書,發現了這本書中藏有許許多多海芋以前都不知道的寶物,他並不是一本改造Blog的書,而是一本讓您的Blog添加許多與人互動的書藉。

 

舉例而言,裡面介紹了「Mybloglog」、「Google Adsense」、「Funp」等等一些有的沒的widget,另外還介紹了「Feedburner」等有用的資訊。

 

此外,這本書之中,還藏有許多有用的widget,或許您會覺得,我的Blog有需要這麼多外掛嗎?這點海芋不能替您回答,不過如果您是經營一個社群Blog,或是您的Blog是屬於分享資訊的性質,那麼這一本書,正是您不可錯過的一本書籍。

 

然而,不知您會不會覺得,這些資訊上網找就有了啊,為什麼要買書呢?事實上也沒錯啦,不過對海芋而言,買書比較不會忘記裡面寫什麼,也可以偶爾來墊墊便當!不,我是說,偶爾來翻閱,倒也是不錯的啦!

[Java] 初學者應注意的幾件事

這學期有幸擔任助教,剛好遇到幾位學生寫程式有問題來發問,於是將問題整理如下,或許將來還有學生遇到更多的問題,再來與大家分享。

(1) 若以控制字元模式編譯程式,則路徑要設好。
首先,必須要搞懂為什麼path要設,還有classpath是幹麼的,如果沒設,則是無法用Javac編繹程式的。

(2) 莫太過倚賴編輯器。
雖然編輯器帶給我們許多的方便,但是如果太過依賴的話,反而會讓自己的程式功力退化。

(3) 宣告和敘述句要搞清楚。
Java和多數的程式語言一樣,可以允許用「,」來一次宣告多個變數,但是只要變數宣告過後,進行任何一種運算,即是一個「敘述句」,就不可以用「,」來分隔多個敘述句了,而要以「;」來結束每一個敘述句。

(4) 敘述句結尾記得加結束符號
這是無論初學者還是摸了一段時間的程式設計師都很常犯的錯誤,就是忘了在敘述句結束加上結束符號,或許有些程式語言不必加,但是大多都還是要加的。
Read More

[PHP] 查看目前使用的PHP版本?

由於 PHP 5 以前的版本和現在的版本略有不同,若寫大型專案,或是開發一些比較著名的開源軟體的套件,如LifeTpye、Mediawiki等等,而又把機器架在國內、外的虛擬機器上,要如何查詢PHP的版本,而寫不同的程式呢?

在 PHP.Net 的網站中,提供了兩種方式可以迅速知道您目前機器上的PHP版本,分別介紹如下:

1.
使用「PHP_VERSION」,這是php.net中所提供的比較簡潔的方式,像LifeType就是用此來做定義。

2.
使用「phpversion($string)」,當然這是比較複雜的方式,但是可以查詢的種類比較多。

接下來,舉個例子來做結尾:

<?
echo PHP_VERSION;
echo " ".phpversion();
echo phpversion('tidy');
?>

 

以海芋是php 5.2.3的環境而言,則會秀出 5.2.3,即是目前php的版本。

histats 教學 ~ 款式超多、超華麗的計數器

histats 是一個超棒的計數器,提供多種精美的樣式及簡單的分析,而且完全免費,如果是你是站長,那麼這個計數器是你必備的工具之一。

 

◎◎網站小檔案◎◎
網站名稱:histats
網站介面:英文
網站性質:免費
是否註冊:
網站網址:http://www.histats.com/

 

Step 1.
首先,先連到 histats網站,並點選〔Register〕。

 

Step 2.
填入註冊資訊,填完後勾選「I have read…」,並按下〔Continue〕按鈕。

 

  • Email:填入Email資料。
  • Email Confirm:再填入一次Email做資料確認。
  • Password:密碼。
  • Password Confirm:再填入一次密碼做資料確認。
  • Site URL:網站網址。
  • Title:網站名稱。
  • Description:網站描述。
  • Page views start value:開始統計時的頁面瀏覽量。
  • Visitors start value:開始統計時的人次瀏覽量。
  • Time Zone:時區,若是台北,記得選CTT。
  • Type:網站種類,若是部落格,則請選Blog。
  • Category:網站種類。
  • Language:語言,選預設的英文即可。
  • Screen Question:若是忘記密碼要問的問題。
  • Screen answer:若是忘記密碼要問的問題之答案。
  • Not Public Stats:不是公開的狀態,若打勾此項,只有您可以進入後台看您的流量分析。

 

Step 3.
選擇計數器的種類

 

 

Step 4.
選擇計數器的樣式,選擇完後按〔Continue〕。

 

Step 5.
選擇的顯示的項目,選擇完後按〔Continue〕。

 

  • Visitors today:今日訪客。
  • Total visitors:全部訪客。
  • Page views today:今日總頁面瀏覽量。
  • Total page views:全部總頁面瀏覽量。
  • Users online:幾位用戶在線上。
  • Empty:不顯示

 

Step 6.
最後,COPY程式碼到,並貼到您的blog上即可。

LibreOffice Calc 的使用教學

OpenOffice.org Calc是一套類似於Microsoft Office Excel的試算表軟體,他不僅可以幫你快速計算您所輸入的數值,也可以輸入函式或是程式,且具有自動判斷的功能。海芋的目標是希望大家能擺脫Microsoft Office Excel,而使用免費的OpenOffice.org,畢竟使用盜版,用起來也不安心。故海芋目前正在著手寫一系列的教學,目前已經完成最五篇最基礎的操作,將來將會新增函式的教學、資料篩選等內容。而目前寫的內容,對於一般只是記錄資料的讀者來說,應該是已經非常足夠了。

 

本系列的教學目錄如下:

 

目前應該大多數人常用的功能都完成了,剩下的功能就慢慢再寫吧,以後如果沒有意外,將朝向每三或四個單元寫完,再一次釋出內容!