突然发现,已经好久没有上来写blog了,本来还以为能够天天写,后来发现,确是心有余力而不足啊。学期进入中段,课业慢慢多了,各种各样的事情也接踵而来了。本学期的Java课程也已经结课了,8周32个学时,时间过得好快。前段时间我还在这里讲述自己的Java学习历程,现在已经要面对考试了。当然,我不惧怕考试。
我的作业,写完了,全部是自己写的,我感到很欣慰。身边的问题也开始慢慢变得多起来,是同学问的,还有5天就要考试了,大家都在努力复习。我很感谢问我问题的同学,从他们的问题中,我找到了很多自己的不足,找到了许多自己概念模糊的地方,这些,都是考试前最好的复习。所以,我每次都很耐心地解答他们的问题。同时,我也无偿的把我的全部作业都提供给需要的同学。我知道,有些同学对这个实在没有兴趣,就像我对物理没有兴趣一样,但是我们还是要面对考试。所以,我尽量把注释写得详细,让他们能看懂,考试是开卷的,他们也可以拿去参考。能不能用得上,就要看自己的造化了。其实,我说的是心里话。
学习的动力只有两种,一是压力,一是兴趣。8周32个学时,去除8个上机时间,只有24个小时。一天!把Java学到家?不可能!所以只能有压力,要考试了,不得不学;要做项目了,不得不学;要工作了,不得不学。不过,我还是喜欢从兴趣方面入手。学院的很多同学都喜欢打游戏,计算机学院的计算机普及率是相当可观的,但是仅仅是打游戏,未免有些浪费了。我也喜欢游戏,不过基本上不上瘾。有空的时候,我会和宿舍的同学玩玩cs,或者C&C ZeroHour(呵呵,这个游戏我是高手!),或者三国无双,不过该学习的时候还是学习。游戏不应该过头,身边有些同学因为游戏而堕落,虽然我是局外人,不过有时还是想拉他们一把。其实,如果能对游戏世界的内部感兴趣的话,我觉的也是一件好事。我想说的是游戏编程。
估计有些人都听过robocode,这是一个IBM alphaWorks支持的项目,是一个半成品化的机器人对战平台。由于五一之后要参加学校组织的机器人比赛,所以最近解了一些这方面的情况。我认为,如果对java有一定的了解,学过一些基本知识,robocode能够很好地提升你对java学习的兴趣。简短的代码,清晰的结构,但是里面蕴含着丰富的知识,包括数学知识、策略知识、编程知识……再深入一点,可以看看robocode的对战平台的结构是怎样的,或者试图反编译一下,看看源代码,这些对于学习来说都是大有裨益的。
呵呵,有点扯远了,其实今天写作的意图为‘空’,原来下午第一节是Java,这个时候是中午休息的时候,不过既然下午没有课了,就顺便上来写写自己的心情,想到之处顺笔带过,没有章节,没有条理,不知道你是否满意。以后,还会经常上来这里写文章的。几周之前,想写一些教程发上来,不过落笔的时候,才发现自己的功力有限,估计是看了BruceEckel的书多了的缘故罢,养成了一种严谨的习惯,便也不好意思在这里毒害群众了。
最后,发一段源代码上来,是我的某一次Java作业,呵呵,仅当作为结课的纪念吧。
/*
* Created on 2005-4-14
* 窗口分为上下两个区,分别运行两个线程,一个在上面的区域中显示
* 由右向左游动的字符串,另一个在下面的区域从左向右游动的字符串.
*/
/**
* 作者:龙震岳
* 学院:计算机与信息技术学院
* 班级:计科0308
*/
import java.awt.*;
import java.util.*;
import javax.swing.*;
class MoveFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jp1 = new JPanel(), jp2 = new JPanel();
/**
* 定义两个Canvas的内部类。
* 刚开始的用后用panel,发现画完之后会留有痕迹,
* 每次画完还要擦除,很不爽,所以改用Canvas,呵呵。
**/
private Canvas cv1 = new Canvas() {
private static final long serialVersionUID = 1L;
int x = 0, y = 70, maxX = 640, minX = 0;
boolean isToEnd1 = false;
// 碰到边就返回的算法,很简单的啦。
public void paint(Graphics g) {
if (!isToEnd1) {
g.drawString("向右移动", x, y);
x += 10;
if (x >= maxX)
isToEnd1 = true;
} else {
g.drawString("向左移动", x, y);
x -= 10;
if (x <= minX)
isToEnd1 = false;
}
}
},
cv2 = new Canvas() {
private static final long serialVersionUID = 1L;
int x = 640, y = 70, maxX = 640, minX = 0;
boolean isToEnd2 = false;
public void paint(Graphics g) {
if (!isToEnd2) {
g.drawString("向左移动", x, y);
x -= 10;
if (x <= minX)
isToEnd2 = true;
} else {
g.drawString("向右移动", x, y);
x += 10;
if (x >= maxX)
isToEnd2 = false;
}
}
};
private int x1 = 0, x2 = 0;
private Thread t1, t2;
// 定义两个随机的变量,使它们休眠的时间不一样
private Random rand1 = new Random();
private Random rand2 = new Random();
private void move1() {
t1 = new Thread() {
public void run() {
while (true) {
cv1.repaint();
x1 = rand1.nextInt(100);
try {
sleep(x1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t1.start();
}
private void move2() {
t2 = new Thread() {
public void run() {
while (true) {
cv2.repaint();
x2 = rand2.nextInt(100);
try {
sleep(x2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t2.start();
}
public MoveFrame() {
Container cp = getContentPane();
cp.setLayout(new GridLayout(2, 1));
cp.add(cv1);
cp.add(cv2);
move1();
move2();
this.setTitle("线程作业");
this.pack();
this.setSize(640, 280);
this.setVisible(true);
}
}
public class MovingString {
public static void main(String[] args) {
MoveFrame mf = new MoveFrame();
}
}