歡迎辭

歡迎來到“篤志以礪,決起而飛”!
如果您是第一次來到本站,建議訪問本站導讀以便更快地了解本站。
如果您喜歡本站,歡迎訂閱

 

2012 年五月
« 四  
 123456
78910111213
14151617181920
21222324252627
28293031 

外教 Joy 家一行

今天中午我和一些其他同學受外教邀請,一起來到英語聽說課的澳大利亞外教Joy 家裡吃飯。(以下對話若為中文,皆為英文翻譯而來)

我們來到外教家裡後,第一感受是外教家裡的陳設與布置非常的中國化。如果不是看到桌上的外文書籍和聖誕老人,估計看不出這是一個外國教師的家裡。很快我們吃到了可口的飯菜,大多是以前沒有吃過的,但也有餃子,而且餃子特別好吃。Joy 說餃子是她最喜歡的食物。

在做飯、吃飯和吃飯後的閑聊中,Joy 告訴了我們了很多事情,這些事情讓好多同學唏噓不已,不過我可能因為以前看到的東西太多,所以並沒有什麼太多的感覺。

  • Joy 喜歡吃魚。在她來到中國之前,醫生叮囑她千萬不要吃中國的魚,因為河流污染嚴重(No fish in China. So much pollution.)
  • Joy 來到中國之後,看到大家都在吃澳大利亞人法律禁止的味精,因為它對心臟有嚴重危害。(Weijing is forbiden in Austrilia.)
  • Joy 來到大學之後,看到大家都只能住亂七八糟的環境里歪歪扭扭的樓房,進去發現牆上一塊塊的往下掉。(Always falling down)她給我們說,澳大利亞都住的自己的平房,旁邊都是水果樹,非常好吃。如果買不起房,政府會給你免費提供房讓你居住,如果你花很少一點錢,就可以 買下來。
  • Joy 表示來到學校之後,還沒有看到過院長。她說,或許院長在辦公室里成天喝啤酒吧(Drink bear all the day)。
  • Joy 說,他所居住的樓旁邊原來是一個建築(There used to be a building there),後來拆遷,每天沒日沒夜的噪聲讓她無法入睡。([擬聲詞] all day and night)現在,拆完了,可是又開始建設新樓,每天還是噪聲 all day and night。她對着外面喊,shut up!! But they never listen to her.
  • Joy 說,澳大利亞學生上大學的不是很多。大部分人不需要上,比如你想理髮,就上理髮學院,如果你想寫程序,就去培訓電腦,培訓出來就有工作,(There is work for everyone)。上大學的人是少數,哪像中國,大家擠破頭上大學,只是為了找個工作(Go to university for a job)。大學應該是素質很高的學生學習的天堂,很神聖的地方。
  • Joy 說,在澳大利亞因為政府補貼很高,大家大多不想工作。所以工資很高。刷鍋洗碗因為沒人干,工資極高,都是給中國人干。但是老闆都對職工很好,就算你刷鍋洗碗,老闆也總擔心你覺得待遇不好,因為你一個電話給政府,他就完了。
  • Joy 說,在澳大利亞大家出門進門不換鞋的,因為到處都很乾淨,每個地方都是美麗的風景畫。到了中國,她卻得習慣進門換鞋。
  • Joy 說,在中國生活非常艱難。(It is really hard in China.)她非常不容易。
  • Joy 知道我們上大學交了8000元/年,卻連課本都要自己買時,她的感覺是 it’s CRAZY. 而當她發現我們沒有渠道report to goverment時,她的感覺是 it’s CRAZY.
  • Joy 說中國最好的東西是百度,可以免費下歌。不過 Joy 還是習慣於把電影和音樂 CD 放入光驅,然後播放。

最近忙啊,忙得不可開交。

有人味的語言(轉載)

轉自http://www.ibeidou.net/?p=3404,從駛向地域的列車二次轉載。

這幾天,習近平在中央黨校入學典禮上談文風,批評幹部們老講空話長話。但這位未來的國家竹席,說的卻明顯沒他老婆唱的好聽。有人統計,這篇號召說話要短的文章,長達4948字。念完的話,要花上20分鐘。

前幾天,公安部新聞發言人武和平就校園凶殺案回答提問。記者反覆詢問:對於一心求死的犯罪嫌疑人,採取“當場擊斃”這樣的宣傳口號,是否毫無震懾作 用,反有挑釁之嫌?和平兄懶得動不太靈光的腦子,只得拿出早已備好的稿子,幾番背誦,都只傳達了一個意思:依法擊斃,毫不客氣。對此,網友評論:“發言人 的意思就是:你殺你的,我殺我的……”

今天不談世事,只想說說我們的語言。

我常會表示沉重的哀悼:我們身處一個遍是語言屍體的國度。

早上九點翻開報紙,一個中心兩個點、五講四美三代表、八榮八恥九常委……晚上七點打開電視,且不說不能換台,且不說一如既往地領導很忙國民很幸福世 界亂成一鍋粥,且不說會議無不隆重慰問無不親切群眾無不滿意,就是主持人那不帶任何錶情的面孔、不顯任何感情的腔調、不染一絲人間煙火氣的講話,就已讓人 毛骨悚然。於是乎,張宏民不小心打個嗝,全國就莞爾稱奇。因為那一刻,他不像個國家機器終於像個人了。

記得大學在校報混,第一次寫會議稿。師兄教的第一件事,就是在筆記本上寫下九個學校領導人的名字及排序。“書記、校長、副書記、副校長……可別搞錯了。”一校如此,舉國亦然。

後來也慢慢知道,這個國家的語言里,不僅存在着等級森嚴的座次排序,也存在着四海皆準的套路模式,更存在着秘而不宣的雷區禁地。這件事必須要寫、這件事就這樣寫、這件事想死就寫。

於是,這個國度的語言,成了嚴令而非述說,成了催眠而非告知,成了封禁而非傳播。

於是,我們的報紙、電視、電台,我們的新聞、演講、致辭,充斥着這樣的語言:一如破廟裡啰啰嗦嗦的和尚,獃頭獃腦,四平八穩,很少打比喻,從不開玩 笑,充滿了弔詭的具有中國特色的詞彙與邏輯;即使有着華麗的辭藻,卻像濃妝艷抹的老太婆遮掩不住溝溝壑壑,顯出冷漠蒼老的底色來。

比如,有這樣一篇玉樹救災報道,雖有花哨比喻和昂揚語氣,但當你看到“如果有誰,比慈祥的母親還值得我驕傲和自豪。那就是你,歷經風雨卻愈益成熟的中國共產黨”這樣的句子時,你就可一目了然:此人並非忠臣,也絕非孝子,只是操着文字歌功頌德的匠人而已;

又比如,當你看到“地震搖了2分鐘,都江堰前進了20年”這樣的句子,你也可以輕易嗅出其中殭屍一般的陰冷與腐臭之味來。

簡單地說,這些語言沒有人的氣味。不鮮活,不生動,不重人事,不說人言,不盡人責。語言的蒼白,實是人心的蒼白。

我也常會表示真切的慰問:語言很無辜,總是受人連累。

詞自身是忠良的,卻因操持之人為非作歹,於是詞的意味就變了。人不但使得許多詞死去,化作歌功頌德的蒼白墓碑;更使得許多詞突生了屍變,成了茹毛飲血的可憐殭屍。

比如“和諧”一詞。原本多溫柔和順的一個詞兒,卻不幸被招安,成為朝廷安民的一面遮羞鏡,最後變作傳說中禁言愚民的洪荒巨獸——河蟹。每年六月,它總會很忙,吃掉很多叫做⑥④的小動物;古鴿飛走之後,它就更忙了,胡蘿蔔和溫開水也不放過。

然而,詞有時也會造反的。

它們總會投奔草根網民,用塗鴉和戲噱,用嘲諷和隱喻,來表示內心的不滿,消解所謂的權威。正如王朔當年用玩世不恭的語言將一切崇高拉下了神壇,如今的網民也嬉戲而嚴肅地進行着一場語詞的戰爭。

他們總能將一個莊嚴端正的詞扭轉顛覆,比如“領導”一詞,如今就不那麼正義凜然了;他們也總會將一個微小粗俗的詞渲染轉化,讓其擔負起一些或嘲諷或反抗的職責。比如躲貓貓和俯卧撐,還有霸氣天下的草泥馬。

於是,在語言的國度里,兩個相互對立的世界被劃分開來。

在一個世界裡,威嚴正義的河蟹高站在宮廷的城牆上俯瞰四方,雅克蜥遊盪在天山一帶鎮守西域時不時高呼一聲朝廷萬歲,欺實馬則在長安街上橫衝直撞,儼然一副有人罩着的太子樣。

而在另一個世界裡,草泥馬在馬勒戈壁上四處撒着野,它和法克魷老不服管教天天謀划著犯上作亂,雅蠛蝶就沒那麼大的志向整日宅在家裡做做俯卧撐,布鳴真象沒人能找到它,就只能無聊地躲在牆角打打醬油。

這場雅克蜥與草泥馬的大戰,其實也是所謂朝廷與屁民之間的角力。

有一些語言的衛道士,總是將這些網絡流行語視作毒草,認為它顯出了文化的低俗,抑或玷污了漢語的純潔性。但我卻十分認同怪叔叔鬍子的說法,他十分打 醬油地竊以為:這正是未滿百歲的年輕的現代漢語自身活力的體現,即使稍顯突兀,也不過是年青人臉上的青春痘而已,反倒有力地證明了現代漢語還處在活色生香 的青春期。

更為重要的,它還意味着人心的不死:在一個言說仍是禁忌的國度里,它的國民從未放棄言說的權利,以及歡笑的能力。

最後我想表示真切的希望:有一天我們的語言能愈發有人味。

你看,像奧巴馬在悼念西弗吉尼亞州礦難中遇難礦工的致辭中,一開始,他就把29個遇難者的姓名逐一念出了。還細細描述了他們在礦井中工作的黑暗時 光。最後還不忘自問自責:我們怎忍讓他們失望?一個依賴礦工的國家怎能不盡全力履行職責保護他們?我們的國家怎能容忍人們僅因工作就付出生命;難道僅僅是 因為他們追求美國夢嗎?

乏味么?非常乏味!以至於估計那些美國佬以後都不想再搞出什麼礦難了,免得總統先生老是嘮嘮叨叨。他們的語言中,人總是沉甸甸的,以至於任何權貴都 不敢輕視。不像我們,寫文章總有萬能模板,講講話也只需感謝國家;不像我們,礦工的名字無人能識,領導的名字朗朗上口,悼詞里卻還沒忘了歡慶勝利。

但是我挺怕這樣一個未來的:一個又一個世代過去後,我們的後代們或已衣食無憂、富貴榮華,卻渾然不知地使用着這些長命如龜的語言,做那因循守舊的守墓人。

如果時代變得很壞,那語言一定是落井石,它會越發無聊和僵化;但倘若我們想讓時代變得更好,那麼語言就可變成風向標,它能指示我們如何尋找生命的趣味和鮮活。

所以,我打賭草泥馬能夠大勝雅克蜥,我也期望批評能夠勝過奉承,鮮活能夠戰勝乏味,人性能夠超越制度,我們流傳了數千年的語言能夠重生,一個尊重語言並進而尊重人的國度能夠建立。

在這樣的國度里,人們不用騎上草泥馬就能怒罵,不必躲避河蟹就能說話,阻隔聲音的高牆會盡數拆毀,呆板的、老舊的、粉飾的語言將被視為國家公敵。人們重拾對文字的信心與興趣,萬物得以重新命名,自由獲得守衛敬仰,語言能夠恢復它原本生猛、生動、生機盎然的面貌。

在這樣的國度里,無論生活瑣事、娛樂八卦、政治建言、詩歌夢話,都能平和而處、彼此相安。人們的言語,能夠不肖古人,也能無視禁忌,而只遵從內心的規則與意願,並讓其真正貼近人心。我們能如詩人駱一禾所言,真正安詳地對心愛的談起愛,從容地向光榮者說到光榮。

POJ 2965:非算法優化的重要:時間直減 50%!

可以說這道題和 POJ 1753 特別相似,唯一不同的是,這道題改變了翻轉方法,如果直接位運算 + BFS,會稍微有一點點超時。
所以,這次我採用了非算法方面的優化,直接通過下面的方法將題目的時間減少了50%:
1、用宏徹底消除了幾乎所有函數的調用開支。
2、使用非同步讀寫優化讀寫速度(見代碼注釋)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 *      Flip Game (POJ 2965)
 *      URL: http://poj.org/problem?id=2965
 *      Author: Ceeji Cheng
 *      Type: 枚舉 + 位運算
 *      Status: Sovled
 *      Visit http://ceeji.net/ for more information.
 *      2010-11-14
 *
 */
 
#include <iostream>
#include <cstring>
 
#define count 16
#define rwcount 4
#define bitwidth 16
#define maxlength 65538
#define copyarr(source,dest) dest = source;
#define flip(pstatus, x, y) \
	for (unsigned int ii = 0; ii < rwcount; ii += 1) \
	{ \
		pstatus = pstatus ^ (1 << (bitwidth - (x * rwcount + ii) - 1)); \
	} \
	for (unsigned int ii = 0; ii < rwcount; ii += 1) \
	{ \
		pstatus = pstatus ^ (1 << (bitwidth - (ii * rwcount + y) - 1)); \
	} \
	pstatus = pstatus ^ (1 << (bitwidth - (x * rwcount + y) - 1)); 
#define output(steps) \
	cout << steps;
#define check(pstatus) (pstatus == 0)
#define hassame(status) used[status]
 
typedef unsigned short round_status;
typedef unsigned int uint;
 
using namespace std;
 
bool used[maxlength];
 
void init(round_status &pstatus)
{
	std::ios::sync_with_stdio(false); // 優化讀入速度。
	memset(used, 0, sizeof(used));
	pstatus = 0;
	char c;
	for (uint i = 0; i < count; ++i)
	{
		do
                {
                	cin >> c;
                }
                while (!(c == '-' || c == '+'));
		if (c == '+')
			pstatus = pstatus | (1 << (15 - i));
 
       }
}
 
void output_detail(int p, round_status (&status)[maxlength], int (&cx)[maxlength],  int (&cy)[maxlength],  int (&father)[maxlength])
{
	if (p <= 0)
		return;
	output_detail(father[p], status, cx, cy, father);
	cout << cx[p] + 1 << ' ' << cy[p] + 1 << endl;
}
 
/* Find the result. */
void search(round_status &pstatus)
{
	round_status status[maxlength];
	int step[maxlength], father[maxlength], cx[maxlength], cy[maxlength];
	int pf = 0, pc = 1;
	step[0] = 0;
	cx[0] = -1;
	cy[0] = -1;
	status[0] = pstatus;
	father[0] = 0;
	used[pstatus] = true;
	do
	{
		for (uint i = 0; i < rwcount; ++i)
		{
			for (uint j = 0; j < rwcount; ++j)
			{
                       		status[pc] = status[pf];
				flip(status[pc], i, j);
				if (hassame(status[pc]))
				{
					continue;
				}
				step[pc] = step[pf] + 1;
				used[status[pc]] = true;
				father[pc] = pf;
				cx[pc] = i;
				cy[pc] = j;
				if (check(status[pc]))
				{
					output(step[pf] + 1);
					cout << endl;
					output_detail(pc, status, cx, cy, father);
					return;
				}
				++pc;
				if (pc > maxlength - 1)
				{
					cout << "Impossible";
					return;
				}
			}
		}
		++pf;
 
	}
	while ((pf < pc));
	cout << "Impossible";
	return;
}
 
int main(void)
{
	round_status start_status; // start status of the field.
	init(start_status);
	if (check(start_status))
	{
		output(0);
		return 0;
	}
	search(start_status);
	return 0;
}

POJ 1753 Flip Game 題解

今天我做了 POJ 1753 Flip Game 一題。這道題很簡單,就是寬度優先搜索。關鍵是為了提高搜索的速度和判重速度,要使用 位運算哈希加速。
下面是我的代碼。
非位運算版(速度很慢,要AC請看位運算版)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
 
/*
 *      Flip Game (POJ 1753)
 *      URL: http://poj.org/problem?id=1753
 *      Author: Ceeji Cheng
 *      Type: 枚舉
 *      Status: Sovled
 *      Visit http://ceeji.net/ for more information.
 *      2010-11-13
 *
 */
 
#include <iostream>
#include <cstring>
 
#define count 4
#define maxlength 20000
 
typedef short round_status[count][count];
typedef unsigned int uint;
 
using namespace std;
 
void copyarr(round_status &source, round_status &dest)
{
	memcpy(&dest, &source, sizeof(round_status));
}
 
void output(int steps)
{
       cout << steps;
}
 
void init(round_status &pstatus)
{
       char c;
       for (uint i = 0; i < count; ++i)
       {
               for (uint j = 0; j < count; ++j)
               {
                       do
                       {
                               cin >> c;
                       }
                       while (!(c == 'w' || c == 'b'));
 
                       if (c == 'w')
                               pstatus[i][j] = 0;
                       else
                               pstatus[i][j] = 1;
               }
       }
}
 
void flip(round_status &pstatus, int x, int y)
{
       pstatus[x][y] = 1 - pstatus[x][y];
       if (x > 0)
       {
               pstatus[x - 1][y] = 1 - pstatus[x - 1][y];
       }
       if (y > 0)
       {
               pstatus[x][y - 1] = 1 - pstatus[x][y - 1];
       }
       if (x < count - 1)
       {
               pstatus[x + 1][y] = 1 - pstatus[x + 1][y];
       }
       if (y < count - 1)
       {
               pstatus[x][y + 1] = 1 - pstatus[x][y + 1];
       }
}
 
bool check(round_status &pstatus)
{
       int p = pstatus[0][0];
       for (uint i = 0; i < count; ++i)
               for (uint j = 0; j < count; ++j)
                       if (pstatus[i][j] != p)
                               return false;
       return true;
}
 
bool issame(round_status &status1, round_status &status2)
{
       for (uint i = 0; i < count; ++i)
               for (uint j = 0; j < count; ++j)
                       if (status1[i][j] != status2[i][j])
                               return false;
       return true;
}
 
bool hassame(round_status (*status)[maxlength], int pc)
{
       for (int i = 0; i < pc - 1; ++i)
       {
               if (issame(*(*status + i), *(*status + pc)))
                       return true;
       }
       return false;
}
 
/* Find the result. */
void search(round_status &pstatus)
{
       round_status status[maxlength];
       int step[maxlength];
       int pf = 0, pc = 1;
       step[0] = 0;
       copyarr(pstatus, status[0]);
       do
       {
               for (uint i = 0; i < count; ++i)
               {
                       for (uint j = 0; j < count; ++j)
                       {
                               copyarr(status[pf], status[pc]);
                               flip(status[pc], i, j);
                               if (hassame(&status, pc))
                               {
                                       continue;
                               }
                               if (check(status[pc]))
                               {
                                       output(step[pf] + 1);
                                       return;
                               }
                               step[pc] = step[pf] + 1;
                               ++pc;
                               if (pc > maxlength - 1)
                               {
                                       cout << "Impossible";
                                       return;
                               }
                       }
               }
               ++pf;
 
       }
       while ((pf < pc));
       cout << "Impossible";
       return;
}
 
int main(void)
{
       round_status start_status; // start status of the field.
       init(start_status);
       if (check(start_status))
       {
               output(0);
               return 0;
       }
       search(start_status);
       return 0;
}

位運算版,0ms搞定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 *      Flip Game (POJ 1753)
 *      URL: http://poj.org/problem?id=1753
 *      Author: Ceeji Cheng
 *      Type: 枚舉 + 位運算
 *      Status: Sovled
 *      Visit http://ceeji.net/ for more information.
 *      2010-11-13
 *
 */
 
#include <iostream>
#include <cstring>
 
#define count 16
#define rwcount 4
#define bitwidth 16
#define maxlength 65536
#define copyarr(source,dest) dest = source;
 
typedef unsigned short round_status;
typedef unsigned int uint;
 
using namespace std;
 
bool used[65536];
 
void output(int steps)
{
       cout << steps;
}
 
void init(round_status &pstatus)
{
	memset(used, 0, sizeof(used));
	pstatus = 0;
	char c;
	for (uint i = 0; i < count; ++i)
	{
		do
                {
                	cin >> c;
                }
                while (!(c == 'w' || c == 'b'));
		if (c == 'b')
			pstatus = pstatus | (1 << (15 - i));
 
       }
}
 
void flip(round_status &pstatus, int x, int y)
{
	pstatus = pstatus ^ (1 << (bitwidth - (x * rwcount + y) - 1));
	if (x > 0)
	{
		pstatus = pstatus ^ (1 << (bitwidth - ((x - 1) * rwcount + y) - 1));
	}
	if (y > 0)
	{
		pstatus = pstatus ^ (1 << (bitwidth - (x * rwcount + y - 1) - 1));
	}
	if (x < rwcount - 1)
	{
		pstatus = pstatus ^ (1 << (bitwidth - ((x + 1) * rwcount + y) - 1));
	}
	if (y < rwcount - 1)
	{
		pstatus = pstatus ^ (1 << (bitwidth - (x * rwcount + y + 1) - 1));
	}
}
 
bool check(round_status pstatus)
{
	return (pstatus == 0 || (~pstatus) == 0 || pstatus == 65535);
}
 
bool hassame(round_status status)
{
	return used[status];
}
 
/* Find the result. */
void search(round_status &pstatus)
{
	round_status status[maxlength];
	int step[maxlength];
	int pf = 0, pc = 1;
	step[0] = 0;
	status[0] = pstatus;
	used[pstatus] = true;
	do
	{
		for (uint i = 0; i < rwcount; ++i)
		{
			for (uint j = 0; j < rwcount; ++j)
			{
                       		status[pc] = status[pf];
				flip(status[pc], i, j);
				if (hassame(status[pc]))
				{
					continue;
				}
				step[pc] = step[pf] + 1;
				used[status[pc]] = true;
				if (check(status[pc]))
				{
					output(step[pf] + 1);
					return;
				}
				++pc;
				if (pc > maxlength - 1)
				{
					cout << "Impossible";
					return;
				}
			}
		}
		++pf;
 
	}
	while ((pf < pc));
	cout << "Impossible";
	return;
}
 
int main(void)
{
	round_status start_status; // start status of the field.
	init(start_status);
	if (check(start_status))
	{
		output(0);
		return 0;
	}
	search(start_status);
	return 0;
}

關於 Java、JDK 和 Workbench 的安裝和 Workbench 的使用

在信息系統導論中我們接觸到了 Java 語言。很多人在安裝和配置 Java 環境以及安裝和使用 iCarnegie 公司提供的 Workbench 時遇到了問題,很多人在問。下面結合我的感受用中文寫一下一些需要注意的問題。

一 安裝 Java

安裝 Java 也就是安裝 Java 的虛擬機。他提供了運行 Java 應用程序的基礎類庫和運行時支持,所以也成為 Runtime Libaray。到 http://www.java.com/ 點擊下載並安裝即可。

如果在安裝的過程中提示已經安裝了更新版本,則不必繼續安裝。

二 安裝 Java Develepement Kit

JDK(Java Development Kit) 是Sun Microsystems針對Java開發員的產品,屬於一個 SDK。自從 Java 推出以來,JDK 已經成為使用最廣泛的Java SDK。關於什麼是 SDK,請參見百度百科。簡單的說,如果我們把 Java 當作運行 Java 必須的虛擬機,那麼 JDK 則是開發 Java 程序的程序員最廣泛使用的利器。

大家可以在此處下載到 JDK 1.6: http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe

三 如何編譯和運行 Java 程序

1、編譯 Java 類(源文件):使用命令 javac。這個文件位於 (系統盤):\Program Files[x86]\Java\jdk1.6.0_10\bin。使用 Windows 命令提示符(至於如何使用命令提示符,參見下文)定位到該目錄(使用 cd 命令),然後運行 javac 即可編譯你的程序。

至於 javac 命令語法,可以通過直接鍵入 javac 詢問。

下面是一個刪減版的 javac 語法表:

用法:javac <選項> <源文件>
其中,可能的選項包括:
-g                         生成所有調試信息
-g:none                    不生成任何調試信息
-nowarn                    不生成任何警告
-classpath <路徑>            指定查找用戶類文件和注釋處理程序的位置
-cp <路徑>                   指定查找用戶類文件和注釋處理程序的位置
-sourcepath <路徑>           指定查找輸入源文件的位置
-bootclasspath <路徑>        覆蓋引導類文件的位置
-d <目錄>                    指定存放生成的類文件的位置
-s <目錄>                    指定存放生成的源文件的位置
-encoding <編碼>             指定源文件使用的字符編碼

例如,下面的命令

javac -d D:\ D:\課程\信息系統導論\workbench\Java_Classes\Welcome.java

將會把 Welcome.java 編譯到 D:\ 目錄下,文件名和源文件名及你的程序中的類名一致(請注意區分大小寫)。

2、編譯完成之後,使用 java D:\Welcome 運行你的程序。

四 如何使用 Workbench

首先下載 Workbench(班級群共享里有)(先使用 WinRAR 解壓縮),其中可以執行的文件是 workbench.jar,雙擊這個文件可以打開。

請把你的網頁存放在 Content 文件夾, Java 程序存放在 Java_classes 文件夾。

運行 Workbench,打開裡面顯示的 Content 文件夾圖標,找到你想運行的網頁,右鍵點擊並選擇 Open in browser 可以用瀏覽器打開。

注意:在使用 Workbench 之前,務必先設置環境變量。如果是 Windows 7/Vista 系統,單擊開始「菜單」->計算機->右鍵,選擇屬性,在左側找到「高級系統設置」並打開,單擊「環境變量」按鈕、新建(N)…,變量名為 classpath,內容為你的 workbench 目錄下的 \lib\javax.servlet.jar;.(注意最後的那個點要有),例如:

D:\workbench\lib\javax.servlet.jar;.

如果使用 Windows XP 系統,可以自己查一下如何設置環境變量,我懶得用虛擬機測試了。

五 如何使用命令提示符

按下 Windows 徽標鍵 + R (這種符號表示同時按下兩個鍵,先按第一個鍵),輸入 cmd 並回車,即可打開命令提示符。使用 cd + 空格 + 目錄 即可切換當前目錄。例如,

cd C:\Program Files\Java\jdk1.6.0_10\bin (回車)

即可切換到 C:\Program Files\Java\jdk1.6.0_10\bin,此時再輸入 javac 回車即可運行 javac 程序。

如果哪些沒有提到,歡迎留言,我將及時回復,屆時你將收到電子郵件提醒

第 11 頁,共 66 頁« 最新...567891011121314151617...304050...最舊 »