java设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

天津大学电气自动化与信息工程学院学院

JAVA课程设计报告

班级15通信工程姓名刘华宾学号

对随机数的研究

设计1:活蹦乱跳的小球

一、题目简介

创建一个应用程序,调用awt包产生一个可视化界面,界面分为四个区域,每个区域分别产生10个颜色相同的小球,位置随机,四个区域小球颜色不同。

二、代码实现

import java .awt.*;

public class XiaoQiu{

public static void main(String args[]){

Frame w = new Frame("活蹦乱跳的小球");

w.setSize(1024,768); //设置窗体大小

w.setBackground(Color.BLACK);

w.show();

}

1.首先用记事本创建一个名叫XiaoQiu的主类,使用awt包中的类Frame生成一个对象名为w的窗体,窗体名为“闪烁的小球”,设置窗体大小为1024*768,背景为黑色。

2.另建一个名为MyPanel的类,此类继承自Panel类,并将此画布放进窗体。调用paint方法画出3条白线作为边界。

g.setColor(Color.WHITE);

g.fillOval((int)(Math.random()*206),(int)(Math.random()*768 ),50, 50);

3.在第一区域画出第一个实心的随机圆,调用fillOval方法。

其x坐标先调用方法random产生一个0到1的随机数再乘第一

区域最大x坐标206,并将其转为整形。一开始将206乘在了外面,

(int)(Math.random())*206,产生的小球只能贴着界面的左边,因为先取整,x就变为了0,再乘任何数都是0。同理y坐标写成(int)(Math.random()*768),通过for语句循环增加小球个数。

4.在第二区域画出实心圆。由于想x,y为具体数值,不是带状区域,一开始写成了g.fillOval((int)((Math.random()*462),(int) (Math.random()*768),50,50),确实在第二区域产生了绿色的小球,但第一区域也混有绿色小球,经过很多次尝试,终于想出一种方法:先在第一区域随机产生一定数量的小球,然后通过增加x坐标的值将其平移到第二区域。同理第三、四区域便可以产生不一样颜色的小球,且各区域不会产生混叠。

5.这样产生的小球在面板上是静态的(图1.1),并没有产生动态的效果,通过查阅资料,可以使用接口Runnable,调用repaint方法,加入线程使其每画一次停留30毫秒,这样就给人一种动态的效果了。

public void run(){

while(true){

try{

Thread.sleep(30); //停息30毫秒

}catch (Exception e){}

repaint(); //重画

}

}

6.编译,运行便产生了预想的结果(图 1.2),由于停留时间较短,所以人眼看去会多余10个小球。全部代码请见附录一。

图1.1

图1.2

设计2:从天而降的字母

一、题目简介

在一个1024*768的窗体上,有50个随机产生的彩色字母缓缓落下,犹如下雪。

二、代码实现

1.首先设置一个窗体,方法同设计1,此处不再赘述.

2.第二步是生成50个随机字母,我们索性在这一步将坐标放到

数组变量里,以便准备给下落动作使用,这样就会字母位置随机。

int x[]= new int[50];

int y [] = new int[50];

x[i]=(int)(Math.random()*1000);

y[i]=(int)(Math.random()*500);

问题就在于字母本身是随机的,如何产生更是问题。首先想到的是产生随机数,用char将整形的随机数(ASCII码)转为字符,发现a

对应的ASCII码为97,z就是97+26,第一次写成了(char)(Math.random()*97+26),编译没有出错,但运行时发现还出现了“?”等一系列非字母符号,检查时才想到26个字母才是随机的这一原则,便改为了(char)(Math.random()*26+97),运行产生了正确的结果。为了效果更好,将字母的颜色也设置为了随机的。g.setColor(new Color((int)(Math.random()*255),(int)(Math.random()*255),(in t)(Math.random()*255)));

3.将产生的随机字母用对象g调方法drawString。

g.drawString((char)(Math.random()*97+26),x[i],y[i]);

编译时系统报错,因为drawString的第一个参数为字符串型,这样产生的字母却为字符型。自己通过查阅课本和网络发现一个办法,将字符型转为字符串型。把产生的随机字母放入数组C[i]中,并将其变成对象—new Character(C[i]),并用方法toString()得到字符串g.drawString(newCharacter(c[i]).toString(),x[i],y[i]);。

4.第四步是将产生的随机字母落下,当字母超出了下边界之后就要将y值回到零,为了有更好的效果,还要让x获得一个新的随机数,另外,这个字符也要产生一个新的字符。此处加入线程,引用接口Runnable来实现,每次线程“睡”100ms。

public void run(){

while(true){

for(inti =0;i<50;i++){

y[i]++;

if(y[i]>600){

y[i]=0;

x[i]=(int)(Math.random()*1000);

c[i]=(char)(Math.random()*26+97);

}

}

5.编译,运行便产生了预想的结果(图2.1和图2.2),全部代码请见附录二。

相关文档
最新文档