突然发现,已经好久没有上来写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(); }}