欢迎辞

欢迎来到“笃志以砺,决起而飞”!
如果您是第一次来到本站,建议访问本站导读以便更快地了解本站。
如果您喜欢本站,欢迎订阅

 

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...最旧 »