今天看曾仕強教授所出的《易經的奧祕》時,看到一句話"《老子、四十二章》說:「道」生一,一生二,二生三,三生萬物。",這句話讓我有所感悟,因為這跟Java物件導向的設計很像,因為所有的物件都是繼承Object這個物件而來,由Object可以產生無限個物件。
而太極有陰陽,正如同程式設計中所有的基本概念也是如此,如if, for, while, try catch, switch等都有這個概念,甚至物件導向的多載也是。而且每個都是陰陽不可分的,有人會說"我可以只寫if不寫else啊!",但實際上就算不寫else你一樣在做else的事,也就是do nothing,只是你有沒有將他寫出來而已。因為程式設計的概念會將所有的東西轉換成兩個狀態去運行,即便你是用"if, else if",在他的最小的狀態也就是只有兩個狀態,這跟電腦最初的設計原理有關。而這兩個狀態並不是單純的"0,1"狀態,而是兩個狀態同為一體的,因為誰也不能單獨存在,如果單獨存在,那設計出來的程式就只有一直0而沒有1,或是一直1沒有0了。而這兩個狀態是在有資源時會同時存在,同時運轉,只是在設計上我們需要對狀態做"切片",看看現狀是如何。
Tuesday, October 12, 2010
Wednesday, September 15, 2010
Java檔案套件使用
預設檔案配置(在Windows環境)
兩個檔案都是屬於com.coffee這個套件中
bowCoffee.java
products.java
在編譯的時候在 C:\JavaProject\MyProject 下執行
-d classes 會將編譯好的.class依照他的套件目錄存放在classes資料夾中
在執行products.java編譯時會出現以下錯誤,
因為products.java無法找到com.coffee.bowCoffee
所以products.java要改以-cp(-classpath)的方式執行
要用package路徑方可執行。
若在classes資料夾中則不需要在加-cp classes便可以執行。
備註:
現在開發JAVA的相關IDE都很放便,由其是在版本與套件管理上,
若想單純使用編譯器來開發大型程式,那-d與-cp(-classpath)的使用就相當重要了。
(myProject)
|
|--(source)
| |
| |--(com)
| |
| |--(coffee)
| |
| |--bowCoffee.java
| |--products.java
|
|--(classes)
|
|--(com)
|
|--(coffee)
|
|--bowCoffee.class
|--products.class
兩個檔案都是屬於com.coffee這個套件中
bowCoffee.java
package com.coffee;
public class bowCoffee{
void bow(String str){
System.out.println(str + " is bowing!");
}
}
products.java
package com.coffee;
import com.coffee.bowCoffee;
public class products{
public static void main(String[] args){
bowCoffee bc = new bowCoffee();
bc.bow("Blue Mountain coffee bean");
}
}
在編譯的時候在 C:\JavaProject\MyProject 下執行
-d classes 會將編譯好的.class依照他的套件目錄存放在classes資料夾中
javac -d classes source\com\coffee\bowCoffee.java
javac -d classes source\com\coffee\products.java
在執行products.java編譯時會出現以下錯誤,
因為products.java無法找到com.coffee.bowCoffee
source\com\coffee\products.java:2: cannot find symbol
symbol : class bowCoffee
location: package com.coffee
import com.coffee.bowCoffee;
^
source\com\coffee\products.java:5: cannot find symbol
symbol : class bowCoffee
location: class com.coffee.products
bowCoffee bc = new bowCoffee();
^
source\com\coffee\products.java:5: cannot find symbol
symbol : class bowCoffee
location: class com.coffee.products
bowCoffee bc = new bowCoffee();
^
3 errors
所以products.java要改以-cp(-classpath)的方式執行
javac -d classes -cp classes source\com\coffee\products.java
要用package路徑方可執行。
java -cp classes com.coffee.products
若在classes資料夾中則不需要在加-cp classes便可以執行。
備註:
現在開發JAVA的相關IDE都很放便,由其是在版本與套件管理上,
若想單純使用編譯器來開發大型程式,那-d與-cp(-classpath)的使用就相當重要了。
Tuesday, September 14, 2010
在Ubuntu上安裝eclipse
首先要先確定自己的環境,因為Ubuntu上預設安裝的是OpenJava,
所以要先安裝SUN JAVA並將其配置好。
至於安裝的部份可以參考我上一篇
Ubuntu上安裝SUN-JAVA6 + Apache Tomcat
配置Sun版本的Java,選擇現在要使用的版本。
$ sudo update-alternatives --config java
安裝eclipse,將其安裝在你想要的地方,我同常是放在/usr/local底下
$ sudo tar xzf eclipse-java-helios-linux-gtk.tar.gz
$ sudo chmod -R +r eclipse
建立一個eclipse執行文件
$ sudo touch /usr/bin/eclipse
$ sudo chmod 755 /usr/bin/eclipse
$ sudo gedit /usr/bin/eclipse
建立應用程式選單
$ sudo gedit /usr/share/applications/eclipse.desktop
在第一次使用eclipse時,先執行以下指令
/usr/local/eclipse/eclipse -clean
現在你可以透過應用程式MENU來開啟eclipse了。
參考資料:
http://flurdy.com/docs/eclipse/install.html
所以要先安裝SUN JAVA並將其配置好。
至於安裝的部份可以參考我上一篇
Ubuntu上安裝SUN-JAVA6 + Apache Tomcat
配置Sun版本的Java,選擇現在要使用的版本。
$ sudo update-alternatives --config java
安裝eclipse,將其安裝在你想要的地方,我同常是放在/usr/local底下
$ sudo tar xzf eclipse-java-helios-linux-gtk.tar.gz
$ sudo chmod -R +r eclipse
建立一個eclipse執行文件
$ sudo touch /usr/bin/eclipse
$ sudo chmod 755 /usr/bin/eclipse
$ sudo gedit /usr/bin/eclipse
#!/bin/sh
export ECLIPSE_HOME="/usr/local/eclipse"
$ECLIPSE_HOME/eclipse $*
建立應用程式選單
$ sudo gedit /usr/share/applications/eclipse.desktop
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=/usr/local/eclipse/eclipse
Icon=/usr/local/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true
在第一次使用eclipse時,先執行以下指令
/usr/local/eclipse/eclipse -clean
現在你可以透過應用程式MENU來開啟eclipse了。
參考資料:
http://flurdy.com/docs/eclipse/install.html
Monday, September 13, 2010
Ubuntu上安裝SUN-JAVA6 + Apache Tomcat
第一次使用Ubuntu,現在正在測試軟體安裝的狀況。
不過發現起初要安裝SUN-JAVA6時確無法使用aptitude找到相關套件,
後來拜了一下Google後發現,原來是有apt server沒有更新到。
$ sudo gedit /etc/apt/sources.list
把這兩行前面的#拿掉
deb http://archive.canonical.com/ubuntu lucid partner
deb-src http://archive.canonical.com/ubuntu lucid partner
在進行搜尋
$ sudo aptitude search SUN-JAVA6
終於找到了
因為要執行Apache-Tomcat
所以就先安裝SUN-JAVA6-bin SUN-JAVA6-jre SUN-JAVA6-jdk
$ sudo aptitude install SUN-JAVA6-bin SUN-JAVA6-jre SUN-JAVA6-jdk
再來是安裝Apache Tomcat,先去下載
$ wget http://ftp.twaren.net/Unix/Web/apache//tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz
安裝到/usr/local下
$ sudo mkdir /usr/local/tomcat
$ sudo mv apache-tomcat-6.0.29.tar.gz /usr/local/tomcat/
$ sudo tar -zxvf apache-tomcat-6.0.29.tar.gz
tomcat環境設定
$ sudo gedit ~/.bashrc
增加JAVA_HOME位置
export JAVA_HOME=/usr/lib/jvm/java-6-sun
建立tomcat的auto-start and shutdown檔
$ sudo gedit /etc/init.d/tomcat
其中tomcat是你的資料夾位置,以此次安裝來說要改成tomcat/apache-tomcat-6.0.29
改變tomcat資料夾權限
$ sudo chmod 755 /etc/init.d/tomcat
建立啟動連結
$ sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
$ sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
現在只要重開電腦,他就會自動登入啦!
參考資料:
http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/
不過發現起初要安裝SUN-JAVA6時確無法使用aptitude找到相關套件,
後來拜了一下Google後發現,原來是有apt server沒有更新到。
$ sudo gedit /etc/apt/sources.list
把這兩行前面的#拿掉
deb http://archive.canonical.com/ubuntu lucid partner
deb-src http://archive.canonical.com/ubuntu lucid partner
在進行搜尋
$ sudo aptitude search SUN-JAVA6
終於找到了
因為要執行Apache-Tomcat
所以就先安裝SUN-JAVA6-bin SUN-JAVA6-jre SUN-JAVA6-jdk
$ sudo aptitude install SUN-JAVA6-bin SUN-JAVA6-jre SUN-JAVA6-jdk
再來是安裝Apache Tomcat,先去下載
$ wget http://ftp.twaren.net/Unix/Web/apache//tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz
安裝到/usr/local下
$ sudo mkdir /usr/local/tomcat
$ sudo mv apache-tomcat-6.0.29.tar.gz /usr/local/tomcat/
$ sudo tar -zxvf apache-tomcat-6.0.29.tar.gz
tomcat環境設定
$ sudo gedit ~/.bashrc
增加JAVA_HOME位置
export JAVA_HOME=/usr/lib/jvm/java-6-sun
建立tomcat的auto-start and shutdown檔
$ sudo gedit /etc/init.d/tomcat
# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid
export JAVA_HOME=/usr/lib/jvm/java-6-sun
case $1 in
start)
sh /usr/local/tomcat/bin/startup.sh
;;
stop)
sh /usr/local/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/local/tomcat/bin/shutdown.sh
sh /usr/local/tomcat/bin/startup.sh
;;
esac
exit 0
其中tomcat是你的資料夾位置,以此次安裝來說要改成tomcat/apache-tomcat-6.0.29
改變tomcat資料夾權限
$ sudo chmod 755 /etc/init.d/tomcat
建立啟動連結
$ sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
$ sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
現在只要重開電腦,他就會自動登入啦!
參考資料:
http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/
Saturday, September 11, 2010
Windows7對vista的檔案分享與印表機分享
兩台電腦在同一個區域網路內,網路架構如下
網路分享設定步驟
Windows7上的設定
開始\控制台
控制台\系統及安全性
控制台\系統及安全性\系統
設定工作群組
重新啟動電腦
控制台\網路和網際網路
控制台\網路和網際網路\網路和共用中心
選擇關閉密碼保護共用
控制台\網路和網際網路\網路和共用中心\進階共用設定
家用或公用場所(目前設定檔)
Vista上的設定
開始\控制台
控制台\系統及維護
控制台\系統及維護\系統
使用相同的工作群組
重新啟動電腦
控制台\
控制台\網路和網際網路
控制台\網路和網際網路\網路和共用中心
關閉以密碼保護的共用,將要分享的功能打開
檔案分享
分享Windows7上的檔案
電腦當中的網路選項可以找到windows7電腦
印表機分享
分享配置在Windows7上的印表機
控制台\硬體和音效\裝置和印表機
選擇要分享的印表機,按右鍵選擇"印表機內容"
共用設定與其他驅動程式設定
其他驅動程式設定,選擇共享的驅動程式類型(x86就是32位元版; x64為64位元版)
Vista上的設定
控制台\硬體和音效\印表機
新增印表機
若沒有自動偵測到,可使用第二個紅圈選項
依名稱選取功用應表機,可用瀏覽的方式新增
最後,安裝驅動程式,完成分享。
以上方式,僅適合虛擬區域網路內,或是防火牆或閘道器內的網路。
![]() |
| 寄件者 windows7_vista_share |
網路分享設定步驟
Windows7上的設定
開始\控制台
![]() |
| 寄件者 windows7_vista_share |
控制台\系統及安全性
![]() |
| 寄件者 windows7_vista_share |
控制台\系統及安全性\系統
設定工作群組
![]() |
| 寄件者 windows7_vista_share |
![]() |
| 寄件者 windows7_vista_share |
![]() |
| 寄件者 windows7_vista_share |
重新啟動電腦
控制台\網路和網際網路
![]() |
| 寄件者 windows7_vista_share |
控制台\網路和網際網路\網路和共用中心
![]() |
| 寄件者 windows7_vista_share |
選擇關閉密碼保護共用
![]() |
| 寄件者 windows7_vista_share |
控制台\網路和網際網路\網路和共用中心\進階共用設定
家用或公用場所(目前設定檔)
![]() |
| 寄件者 windows7_vista_share |
Vista上的設定
開始\控制台
![]() |
| 寄件者 windows7_vista_share |
控制台\系統及維護
![]() |
| 寄件者 windows7_vista_share |
控制台\系統及維護\系統
使用相同的工作群組
![]() |
| 寄件者 windows7_vista_share |
重新啟動電腦
控制台\
![]() |
| 寄件者 windows7_vista_share |
控制台\網路和網際網路
![]() |
| 寄件者 windows7_vista_share |
控制台\網路和網際網路\網路和共用中心
關閉以密碼保護的共用,將要分享的功能打開
![]() |
| 寄件者 windows7_vista_share |
檔案分享
分享Windows7上的檔案
![]() |
| 寄件者 windows7_vista_share |
![]() |
| 寄件者 windows7_vista_share |
電腦當中的網路選項可以找到windows7電腦
![]() |
| 寄件者 windows7_vista_share |
![]() |
| 寄件者 windows7_vista_share |
印表機分享
分享配置在Windows7上的印表機
![]() |
| 寄件者 windows7_vista_share |
控制台\硬體和音效\裝置和印表機
選擇要分享的印表機,按右鍵選擇"印表機內容"
![]() |
| 寄件者 windows7_vista_share |
共用設定與其他驅動程式設定
![]() |
| 寄件者 windows7_vista_share |
其他驅動程式設定,選擇共享的驅動程式類型(x86就是32位元版; x64為64位元版)
![]() |
| 寄件者 windows7_vista_share |
Vista上的設定
控制台\硬體和音效\印表機
新增印表機
![]() |
| 寄件者 windows7_vista_share |
![]() |
| 寄件者 windows7_vista_share |
若沒有自動偵測到,可使用第二個紅圈選項
![]() |
| 寄件者 windows7_vista_share |
依名稱選取功用應表機,可用瀏覽的方式新增
![]() |
| 寄件者 windows7_vista_share |
最後,安裝驅動程式,完成分享。
![]() |
| 寄件者 windows7_vista_share |
以上方式,僅適合虛擬區域網路內,或是防火牆或閘道器內的網路。
Thursday, August 26, 2010
Thursday, August 19, 2010
在Chrome中使用ScribeFire來發表文章
這是我第一次在Chrome中使用ScribeFire(以下簡稱SF)來發表文章,感覺很特別。
SF有Blogger登入功能,所以可以很方便存取Blogger中的文章。
![]() |
SF亦可以編寫新舊文章(舊文章會自Blogger中讀入)。
![]() |
SF的編文方式是採用Rich Text的方式,與Blogger中的邊文方式大同小異,也可使用HTML Mode,但是不支援圖片上載。
![]() |
Categories也會將舊有的標籤讀入,亦可加入新的標籤,但是無法同時使用兩個舊有標籤,需要用New Category的方式加入,不是很方便。
![]() |
最後是可以選擇Publish與Draft。
![]() |
完整的功能頁
![]() |
------使用心得------
對於發文量很大的使用者來說,這個套件相當好用,但對於只擁有少數Blogger的人來說,
就沒有什麼大的差別了。
而且雖然這個套件很多人使用,但誰也不敢擔保他會不會洩漏個資(帳號密碼)啊!
Wednesday, August 18, 2010
Java enum的使用範例
enum Today{
Mon(1), Tue(2), Wed(3), Thu(4), Fri(5), Sat(6), Sun(7);
Today(int d){
this.day=d;
}
private int day;
public int getDay(){
return day;
}
}
class Test{
public static void main(String[] args){
Today t = Today.Tue;
switch(t.getDay()){
case 1: System.out.println("Today is Monday."); break;
case 2: System.out.println("Today is Tuesday."); break;
case 3: System.out.println("Today is Wednesday."); break;
case 4: System.out.println("Today is Thursday."); break;
case 5: System.out.println("Today is Friday."); break;
case 6: System.out.println("Today is Saturday."); break;
case 7: System.out.println("Today is Sunday."); break;
default: break;
}
}
}
結果:
java Test
Today is Tuesday.
Friday, August 06, 2010
Wednesday, August 04, 2010
Java基本資料範圍
public class DataRange {
public static void main(String[] args) {
System.out.println("byte range: " + Byte.MAX_VALUE + " ~ " + Byte.MIN_VALUE);
System.out.println("short range: " + Short.MAX_VALUE + " ~ " + Short.MIN_VALUE);
System.out.println("int range: " + Integer.MAX_VALUE + " ~ " + Integer.MIN_VALUE);
System.out.println("long range: " + Long.MAX_VALUE + " ~ " + Long.MIN_VALUE);
System.out.println("float range: " + Float.MAX_VALUE + " ~ " + Float.MIN_VALUE);
System.out.println("double range: " + Double.MAX_VALUE + " ~ " + Double.MIN_VALUE);
}
}
C:\Java\exam>javac DataRange.java
C:\Java\exam>java DataRange
byte range: 127 ~ -128
short range: 32767 ~ -32768
int range: 2147483647 ~ -2147483648
long range: 9223372036854775807 ~ -9223372036854
float range: 3.4028235E38 ~ 1.4E-45
double range: 1.7976931348623157E308 ~ 4.9E-324
byte使用8位元; short使用16位元; int使用32位元; long使用64位元
float使用32位元; double使用64位元
char使用16位元;
左邊的部分都可以指定(assignment)給右邊的型別:
byte --> short --> int --> long --> float --> double
window 自動關機設置
用在xp/vista可以自動關機
只要在Command Prompt
打進 shutdown.exe -s -t 60(60就是1分鐘-3600就是一小時)
-s(是關機)
-t (是時間)
-a (是取消)
-r (是重新啟動)
電腦就會自動的關機啦
這個工能的好處是當你要出門時又怕電腦開太久還
就可以用來關機
時間可以自己設置
只要在Command Prompt
打進 shutdown.exe -s -t 60(60就是1分鐘-3600就是一小時)
-s(是關機)
-t (是時間)
-a (是取消)
-r (是重新啟動)
電腦就會自動的關機啦
這個工能的好處是當你要出門時又怕電腦開太久還
就可以用來關機
時間可以自己設置
Friday, July 23, 2010
Array Length
寫程式常常會需要用到陣列長度,以下列出幾種方法:
C
結果:3
C++
結果:3
Java
結果:3
參考資料:
C Array length function problem
C++ Tip: How To Get Array Length
C
int a[3]={1,2,3};
int arrLength=(sizeof(a)/sizeof(*a));
printf("%d", arrLength);
結果:3
C++
template
int GetArrLength(T(&)[size]){return size;}
int main()
{
int a[]={1,2,3};
int arrLength = GetArrLength(arr);
printf("%d", arrLength);
getchar();
return 0;
}
結果:3
Java
int a[]=new int[3];
System.out.println(a.length);
結果:3
參考資料:
C Array length function problem
C++ Tip: How To Get Array Length
Monday, July 19, 2010
Sunday, July 18, 2010
Tuesday, April 13, 2010
[C\C++]:printf(), scanf();
printf("格式字串", 項目1, 項目2, ...);
使用範例:
#include
int main(){
int c=11;
printf("(%5d)10\n",c);
printf("(%5o)8\n",c);
printf("(%5x)16\n",c);
getch();
return 0;
}
執行結果:
( 11)10
( 13)8
( b)16
printf()函數常用的格式碼:
格式碼 說明
%c 字元
%% 印出百分比號
%d 十進位整數
%ld 長整數
%e 浮點數,指數e型式
%f 浮點數,小數點型式
%u 無號十進位整數
%o 無號八進位整數
%x 無號十進位整數
printf()函數常用的跳脫序列
跳脫序列 功能
\a 警告音
\b 倒退
\n 換行
\r 歸位
\t 跳格
\' 印出單引號
\" 印出雙引號
\\ 印出反斜線
\/ 印出斜線
scanf("格式字串", &變數1, &變數2, …);
使用範例:
#include
int main(){
int c;
scanf("%d", &c);
printf("(%5d)10\n",c);
getch();
return 0;
}
執行結果:
12
( 12)10
scanf()函數常用的輸入格式碼:
格式碼 說明
%c 字元
%d 十進位整數
%lf 倍精度浮點數
%f 浮點數,小數點型式
%u 無號十進位整數
%o 無號八進位整數
%x 無號十進位整數
SyntaxHighlighter教學
如果要在網頁上放程式碼,最麻煩的是會被blogger的網站將辨識錯誤成HTML,
所以利用SyntaxHighlighter就可以很方便的使用了。
網站:
http://alexgorbatchev.com/wiki/SyntaxHighlighter
SyntaxHighlighter是利用JavaScript所寫成的,所以很適合使用在Blogger中。
一下是設定步驟
步驟一:
可以選擇到官網下載最新的程式碼,或是使用官網的網頁版。
兩者有好有壞,前者相較於後者是,除非你擺放程式碼的網路位置連線太慢,要不然前者的連線速度會較快,因為後者會因為太多人使用,造成速度變慢。而後者的好處是方便操作,不需要額外的空間擺放這些程式碼。
若使用前者,則先將裡面的"Scripts"與"styles"內的所有檔案,都上傳至你的網頁空間中。
步驟二:
以使用Blogger為例,到"版面配置/修改HTML/"將以下程式碼貼在"body"之間
步驟三:
可參照以下的範例操作。
說明-
brush:<使用的語言>; gutter:<是否要行號(true|false)>; smart-tabs:gutter:<是否使用tab(true|false)>; table-size:
brush:
可使用的語言有
參考文章:
http://www.inote.tw/2009/02/blogger.html
所以利用SyntaxHighlighter就可以很方便的使用了。
網站:
http://alexgorbatchev.com/wiki/SyntaxHighlighter
SyntaxHighlighter是利用JavaScript所寫成的,所以很適合使用在Blogger中。
一下是設定步驟
步驟一:
可以選擇到官網下載最新的程式碼,或是使用官網的網頁版。
兩者有好有壞,前者相較於後者是,除非你擺放程式碼的網路位置連線太慢,要不然前者的連線速度會較快,因為後者會因為太多人使用,造成速度變慢。而後者的好處是方便操作,不需要額外的空間擺放這些程式碼。
若使用前者,則先將裡面的"Scripts"與"styles"內的所有檔案,都上傳至你的網頁空間中。
步驟二:
以使用Blogger為例,到"版面配置/修改HTML/"將以下程式碼貼在"body"之間
步驟三:
可參照以下的範例操作。
#include
int main(){
printf("Hello!");
getch();
return 0;}
說明-
brush:<使用的語言>; gutter:<是否要行號(true|false)>; smart-tabs:gutter:<是否使用tab(true|false)>; table-size:
brush:
可使用的語言有
| Brush name | Brush aliases | File name |
|---|---|---|
| ActionScript3 | as3, actionscript3 | shBrushAS3.js |
| Bash/shell | bash, shell | shBrushBash.js |
| ColdFusion | cf, coldfusion | shBrushColdFusion.js |
| C# | c-sharp, csharp | shBrushCSharp.js |
| C++ | cpp, c | shBrushCpp.js |
| CSS | css | shBrushCss.js |
| Delphi | delphi, pas, pascal | shBrushDelphi.js |
| Diff | diff, patch | shBrushDiff.js |
| Erlang | erl, erlang | shBrushErlang.js |
| Groovy | groovy | shBrushGroovy.js |
| JavaScript | js, jscript, javascript | shBrushJScript.js |
| Java | java | shBrushJava.js |
| JavaFX | jfx, javafx | shBrushJavaFX.js |
| Perl | perl, pl | shBrushPerl.js |
| PHP | php | shBrushPhp.js |
| Plain Text | plain, text | shBrushPlain.js |
| PowerShell | ps, powershell | shBrushPowerShell.js |
| Python | py, python | shBrushPython.js |
| Ruby | rails, ror, ruby | shBrushRuby.js |
| Scala | scala | shBrushScala.js |
| SQL | sql | shBrushSql.js |
| Visual Basic | vb, vbnet | shBrushVb.js |
| XML | xml, xhtml, xslt, html, xhtml | shBrushXml.js |
參考文章:
http://www.inote.tw/2009/02/blogger.html
Thursday, April 08, 2010
[Java]jdk-6u19-windows-i586環境參數設定
因為安裝位置預設在
C:\Program Files\
所以在環境參數中要新增一個變數名稱PATH
變數值為
若已經有一個變數PATH,那就直接加在變數值後面即可。
再新增一個變數名稱CLASSPATH
變數值為
如果要測試有沒有設定成功
到執行命令列打cmd
執行javac
如果可以看到javac的使用參數說明的話,那代表你成功設定好環境參數了!
C:\Program Files\
所以在環境參數中要新增一個變數名稱PATH
變數值為
;C:\Program Files\Java\jdk1.6.0_19\bin
若已經有一個變數PATH,那就直接加在變數值後面即可。
再新增一個變數名稱CLASSPATH
變數值為
.;C:\Program Files\Java\jdk1.6.0_19\lib;C:\Program Files\Java\jdk1.6.0_19\lib\tools.jar;
如果要測試有沒有設定成功
到執行命令列打cmd
執行javac
如果可以看到javac的使用參數說明的話,那代表你成功設定好環境參數了!
Saturday, February 27, 2010
費氏數列(Fibonacci Number)
讀資料結構,有時候會突然撞牆,每每已了解的知識,太久不用就會忘掉!
費氏數列(Fibonacci Number)是種很有趣的數列,
他的規則如下:

所以大致排列方式為
如果用樹狀圖會更容易了解


使用遞迴的方式,可以得到費氏數列的值:
費氏數列(Fibonacci Number)是種很有趣的數列,
他的規則如下:

所以大致排列方式為
+-----+---+---+---+---+---+---+---+--------+
| n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ...... |
+-----+---+---+---+---+---+---+---+--------+
| Fib | 0 | 1 | 1 | 2 | 3 | 5 | 8 | ...... |
+-----+---+---+---+---+---+---+---+--------+
如果用樹狀圖會更容易了解


使用遞迴的方式,可以得到費氏數列的值:
#include
int X(int n){
if(n<=1) return n;
else return X(n-1)+X(n-2);
}
int main(){
printf("%d", X(6));
getch();
return 0;
}
Monday, February 08, 2010
以陣列實作堆疊
在學習資料結構時,最重要的一個課題就是堆疊、駐列等結構。以下簡介以陣列實作堆疊的案例:
先簡介一些必要變數與函數:
StackOverflow()當堆疊已經滿的時候告知使用者"Stack Over flow",也就是不能再push資料;
StackUnderflow()當堆疊已經空的時候高知使用者"Stack Under flow",也就是不能再pop資料;
CreateStack()當需要堆疊stack時,讓其指標初始位置定在-1,因為C語言的陣列是從0開始編排;
IsStackEmpty()判斷堆疊stack是否已空;
IsStackFull()判斷堆疊stack是否已滿;
AddStack(int item)將一筆資料item丟入堆疊stack中,過程須判斷stack還有沒有空間;
DeleteStack()將堆疊stack最上面的一筆資料移除,但實際上只是將stack的指標sp往下移動,在過程中要先判斷stack是否已空,而不能在移動sp;
StackTop()將堆疊stack最上面的值複製出來;
以下是一個簡單的堆疊範例:
以下是程式結果:
先簡介一些必要變數與函數:
#define N 100 //堆疊最大容量;
int stack[N]; //宣告stack;
int sp; //堆疊的指標;
StackOverflow()當堆疊已經滿的時候告知使用者"Stack Over flow",也就是不能再push資料;
StackUnderflow()當堆疊已經空的時候高知使用者"Stack Under flow",也就是不能再pop資料;
void StackOverflow(){
printf("\nStack Over flow");
}
void StackUnderflow(){
printf("\nStack Under flow");
}
CreateStack()當需要堆疊stack時,讓其指標初始位置定在-1,因為C語言的陣列是從0開始編排;
void CreateStack(){
sp=-1;
}
IsStackEmpty()判斷堆疊stack是否已空;
IsStackFull()判斷堆疊stack是否已滿;
bool IsStackEmpty(){
return (sp==-1);
}
bool IsStackFull(){
return (sp==(N-1));
}
AddStack(int item)將一筆資料item丟入堆疊stack中,過程須判斷stack還有沒有空間;
void AddStack(int item){ //void AddStack(ItemType item){
if(IsStackFull())StackOverflow();
else stack[++sp]=item;
}
DeleteStack()將堆疊stack最上面的一筆資料移除,但實際上只是將stack的指標sp往下移動,在過程中要先判斷stack是否已空,而不能在移動sp;
int DeleteStack(){ //ItemType DeleteStack(){
if(IsStackEmpty()) StackUnderflow();
else return stack[sp--];
}
StackTop()將堆疊stack最上面的值複製出來;
int StackTop(){ //ItemType StackTop(){
if(IsStackEmpty()) StackUnderflow();
else return stack[sp];
}
以下是一個簡單的堆疊範例:
#include
#include
/***************************************
#ifndef _STDBOOL_H
#define _STDBOOL_H
#define bool _Bool
#define true 1
#define false 0
#define __bool_true_false_are_defined 1
#endif
***************************************/
#define N 100 //const int N=100;
int stack[N]; //ItemType stack[N];
int sp;
void StackOverflow(){
printf("\nStack Over flow");
}
void StackUnderflow(){
printf("\nStack Under flow");
}
void CreateStack(){
sp=-1;
}
bool IsStackEmpty(){
return (sp==-1);
}
bool IsStackFull(){
return (sp==(N-1));
}
void AddStack(int item){ //void AddStack(ItemType item){
if(IsStackFull())StackOverflow();
else stack[++sp]=item;
}
int DeleteStack(){ //ItemType DeleteStack(){
if(IsStackEmpty()) StackUnderflow();
else return stack[sp--];
}
int StackTop(){ //ItemType StackTop(){
if(IsStackEmpty()) StackUnderflow();
else return stack[sp];
}
void Status(){
int i;
printf("sp:%d\n", sp);
printf("stack:\n");
for(i=0; i<=sp; i++){
printf("%d\t", i);
}
printf("\n");
for(i=0; i<=sp; i++){
printf("%d\t", stack[i]);
}
}
int main(){
int input, copy;
char ch;
CreateStack();
Status();
do{
printf("\nInput:");
scanf("%d", &input);
AddStack(input);
Status();
printf("\nDo you want to input a number?(y/n):");
ch=_getche();
}while(ch=='y');
do{
printf("\nDo you want to delete a number?(y/n):");
ch=_getche();
if(ch=='y')
DeleteStack();
printf("\n");
Status();
}while(ch=='y');
copy=StackTop();
printf("\ncopy:%d", copy);
getch();
return 0;
}
以下是程式結果:
sp:-1
stack:
Input:33
sp:0
stack:
0
33
Do you want to input a number?(y/n):y
Input:44
sp:1
stack:
0 1
33 44
Do you want to input a number?(y/n):y
Input:55
sp:2
stack:
0 1 2
33 44 55
Do you want to input a number?(y/n):n
Do you want to delete a number?(y/n):y
sp:1
stack:
0 1
33 44
Do you want to delete a number?(y/n):n
sp:1
stack:
0 1
33 44
copy:44
Subscribe to:
Comments (Atom)

































