java设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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),全部代码请见附录二。