if(moveX[i]<490) {
moveX[i]+=speed[i];
}
else if(runQueue.size()==0) {
runQueue.offer(i);//把i压入队列
}
else if ((x=runQueue.peek())==i&&moveX[i]<770)//如果运行
队列中的元素就是它自己,继续行进
{
moveX[i]++; }
else if(num[i]==0) {
waitQueue.offer(i);//如果不是它自己则进入就绪队列 num[i]++;//保障只进一次队
}
if(moveX[i]==770) {
moveX[i]++; finishnum++;
if(runQueue.size()!=0)
runQueue.remove();//到达终点之后则出运行队列
if(waitQueue.size()!=0)//如果就绪队列之中有值,则出队 {
runQueue.offer(waitQueue.poll());
}
}
} }
(3) 测试用例设计
在界面上有“开始”、“关闭”、“重置”按钮,点击“开始”按钮则四个小球开始移动,点击“重置”按钮则小球恢复至本次的初始状态,重新执行。
四、 上机调试总结与分析
调试结果显示:先来先服务的基本功能已经实现,基本没有bug。在界面上可以添加“暂停”,“继续”按钮来控制小球的运动。
五、 用户使用说明
点击“开始”按钮就可以看到小球开始运动,最先到达CPU边缘的小球会继续前进,其余的小球则在CPU边缘之外开始等待,等到小球通过CPU矩形后,小球停止在CPU矩形之外。这时,最先开始等待的小球开始通过CPU矩形。直到所有的小球通过CPU矩形为止。最终小球会停止在CPU边缘之外。
点击“重置”则重复此次小球运行状态。 点击“关闭”则关闭程序界面。
六、 测试数据与测试结果等内容。
测试结果如下:
初始界面
红球通过CPU,其余小球开始等待
小球全部通过CPU
八、课程设计总结
这次的实验花了我不少的时间,因为一开始不知道怎么做。使用C#来写是很简单的,但是这是个典型的线程问题,虽然有线程但是我们并没有学,所以也不会使用。我们这学期学了java,所以我最终决定使用java来写这个实验。而java使用线程以及搭建界面都是比较麻烦的,但是功夫不负有心人,我还是完成这个实验。
总体来说这次课程设计的收获还是很多的,首先是我们这学期刚学了java语言,但是由于课时较少,只有八周的学习时间,所有说编的程序并不是很多,对于java语言了解的也不够深入,尤其是java可视化程序更是不太会写,通过这次的课程设计,我基本掌握了java界面的搭建方法,以及界面布局的方法。更多的收获是对于java的一大特色——线程有了更深入的了解。之前很少使用线程去写程序的。这次使用了线程之后我才发现java线程的应用还是非常方便的。
在写此程序的过程中遇到的问题还是很多的,比如说界面的搭建以及小球和矩形的绘制等,但这些都是属于java编程的内容,基本上在网上可以找到比较好的解决方案。最大的问题就是小球移动的算法设计了,在我对于先来先服务的算法进行分析之后,最终找到了使用队列解决该问题的方法。
九、附录程序清单
(1)FCFS.java清单
package 先来先服务; import java.awt.Frame; public class FCFS {
public static void main(String[] args) { // TODO Auto-generated method stub MyFrame frame=new MyFrame(\先来先服务\ frame.setVisible(true); } }
(2)MoveThread.java清单 package 先来先服务;
import java.awt.Frame;
//线程类
public class MoveThread extends Thread {
public int id;//小球编号 MyFrame frame;
public MoveThread(int i,MyFrame fra) {
id=i;
frame=fra; }
public void run() {
while (true) { frame.move(id); frame.repaint(); try {
sleep(10);
} catch (Exception e) {
// TODO: handle exception } } } }
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库先来先服务问题java程序设计报告(2)在线全文阅读。
相关推荐: