第四,五周——Java编写的电梯模拟系统(结对作业)
作业代码:https://coding.net/u/liyi175/p/Dianti/git
伙伴成员:石开洪 http://www.cnblogs.com/shikaihong/(博客)
这次的作业是一个结对作业,我对我的Partner比较熟悉,信任和放心,而他对我也是如此,这对我们顺利完成项目有很大的有利影响。
我们一开始比较默契的是都想到用Java语言进行编写代码,我认为以后工作可能对Java的优势比较大,另外我对Java,Eclipse也比较熟悉,于是
我们就想通过这次作业提升一下自己的Java编程的能力。
好了,下面介绍我们的代码——
可以看到,我们设计了一共6个类,其中电梯有四个类,分别对应一号(firstdt),二号(seconddt),三号(thirddt),四号(forth)电梯,Show类是具体的调度程序,
而xianshi类则是界面设计及其响应组件的类。
下面来看界面——
由于我的原因,要准备校园招聘的面试,所以时间比较紧 ,做的界面不是那么好看,此外电梯内部按钮的开关门也没有加,而在电梯类内部设计了超重,开门,关门函数,但由于时间关系,就没有具体写入进系统,希望以后有时间时能完善一下这个模拟程序吧。
再说这个界面,我们用的组件全部是按钮组件,可能有人会问,为什么外部显示也要用按钮,我想说当时突然的一个想法(利用按钮的透明与实化的变化来实现模拟的电梯运行状态)占据了我的头脑,于是我就这样做了......但是我选的Java语言 和按钮组件对以后埋下了一个问题,后文再说......
接下来介绍具体的调度系统,我个人认为,一个按钮控制四部电梯这种情况及其不合理......我认为实际情况最好是设置成一个按钮控制一部或两部。因此我的调度写的也比较简单。
上代码——
if(num%2==0) //当前楼层为双层,第二部电梯无法停靠
{
int a1=f.getzt(); //确定三部电梯目前的状态
int a3=t.getzt();
int a4=f2.getzt();
int b1=f.getfloor(); //
int b2=t.getfloor(); //
int b3=f2.getfloor(); //
int b7=sd.getfloor();// if(a1==0)
{ diaodu1(ck,num,b8); //调度第一部电梯
} if(a1!=0&&a3==0&&a4!=0)
{
diaodu3(ck,num,b4);
}
if(a1!=0&&a3==0&&a4==0)
{
diaodu3(ck,num,b4); //调度第三部电梯 }
if(a1!=0&&a3!=0&&a4==0)
{
diaodu4(ck,num,b5); //调度第四部电梯 }
if(a1!=0&&a3!=0&&a4!=0)
{
if(a1==2&&b1>num) //三个下降的电梯判断楼层是否在当前楼层之上
{
diaodu1(ck,num,b8);
}
else if(a3==2&&b2>num)
{
diaodu3(ck,num,b4);
}
else if(a4==2&&b3>num)
{
diaodu4(ck,num,b5);
}
else {
a1=f.getzt(); //确定三部电梯目前的状态
a3=t.getzt();
a4=f2.getzt();
while(a1!=0&&a4!=0&&a3!=0)
{
try{
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a1=f.getzt(); //确定三部电梯目前的状态
a3=t.getzt();
a4=f2.getzt();
}
if(a1==0)
{
diaodu1(ck,num,b8);
}else if(a1!=0&&a3==0&&a4!=0)
{
diaodu3(ck,num,b4);
}else if(a1!=0&&a3!=0&&a4==0)
{
diaodu4(ck,num,b5);
}else if(a1==0&&a3==0&&a4==0)
{
diaodu1(ck,num,b8);
} } }
}
这是一个楼层为双层的并且按下的是向下状态的调度,首先要接受四部电梯的正在运行的状态,当前楼层,之后再进行调度。
这是调度函数。(请忽略f.getgate(),并没有具体设计开门,关门,超重等问题......)
public void diaodu1(JButton ck,int num,JButton b8[])
{ f.setfloor(ck,num,b8);
f.getgate(false); } public void diaodu2(JButton ck,int num,JButton b[])
{ sd.setfloor(ck,num,b); sd.getgate(false); }
public void diaodu3(JButton ck,int num,JButton b4[])
{ t.setfloor(ck,num,b4); t.getgate(false); //开门 }
public void diaodu4(JButton ck,int num,JButton b5[])
{ f2.setfloor(ck,num,b5); f2.getgate(false); }
单层的与其类似。
然后是类内部的代码——
public void goup(JButton b8[]){ try{
Thread.sleep(2000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();}
floor++;
b8[floor].setContentAreaFilled(true);
b8[floor-1].setContentAreaFilled(false); } public void godown(JButton b8[]){
try{
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} floor--;
b8[floor].setContentAreaFilled(true);
b8[floor+1].setContentAreaFilled(false); }
public void setfloor(JButton ck,int goal,JButton b8[]) { Thread thread=new Thread(){ @Override
public void run(){ while(floor!=goal)
{
if(floor<goal)
{ goup(b8);
zt=1; }
else
{
godown(b8);
zt=2;
}
}
zt=0;
ck.setContentAreaFilled(false);
JOptionPane.showMessageDialog(null, "电梯已经到达该层", "警告", JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(null, "当前是一号电梯 ,请选择目的楼层", "电梯提示",JOptionPane.PLAIN_MESSAGE); }
};
thread.start(); }
这是主要的代码,执行上下楼的功能,以及按钮的透明,实体的变化。上面我说的问题就出现在这里,我最初设计的时候是只设计了一个线程睡眠放在了goup(),godown()函数里,setfloor()函数里面知识一个简单的循环,并没有线程,目的是想让界面在响应时能一个一个的让按钮变化。但是在测试时呈现的是先执行完了所有循环,最后按钮才一起变化。这个问题令我困扰了很长时间,我去请教了很多人,表示都不明白,我也是在无奈去群里问了一句,虽然得到了几个同学热心的帮助,提供了他们的几种看法,但是并不能解决问题,于是我就上网,看书学习,了解更多的线程方面的问题。最后我才在setfloor()函数里新建了一个内部线程类,利用创建线程来实现了电梯的上下按钮显示。以后就没有什么困难了,顺利的完成了编程。
几张运行效果图——
好了,以上就是我们这次的项目,代码还有待优化,功能有待添加,线程弹出提示框有待设计,我们有还待提升。
第四,五周——Java编写的电梯模拟系统(结对作业)的更多相关文章
- Java编写的电梯模拟系统《结对作业》
作业代码:https://coding.net/u/liyi175/p/Dianti/git 伙伴成员:李伊 http://home.cnblogs.com/u/Yililove/ 对于这次作业,我刚 ...
- 第五周Java学习总结(补)
第五周java学习内容(补) 学习内容: File类方法的操作 public String getName() public boolean canRead() public boolean canW ...
- 20145304 第五周Java学习报告
20145304<Java程序设计>第5周学习总结 教材学习内容总结 1.使用try.catch: 如果使用了try.catch,编译时会尝试执行try区块中的程序代码,如果有错误,执行流 ...
- 第五周java学习总结
学号 20175206<Java程序设计>第五周学习总结 教材学习内容总结 6.1 接口 为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口. 使用关键字interf ...
- 20175215 2018-2019-2 第五周java课程学习总结
第六章学习内容 1.接口 使用interface来定义一个接口. 接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是pu ...
- 第十五周java实验作业
实验十五 GUI编程练习与应用程序部署 实验时间 2018-12-6 1.实验目的与要求 (1) 掌握Java应用程序的打包操作: Java程序的打包,程序编译完成后,程序员将.class文件压缩打 ...
- 20165319第五周java学习笔记
教材内容总结 1.String类和StringBuffer类都覆盖了toString方法,都是返回字符串. 所以带不带toString效果是一样的. 2.instanceOf运算符可以用来判断某个对象 ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周
java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...
- 2017-2018-1 JAVA实验站 第四、五周作业
2017-2018-1 JAVA实验站 第四.五周作业 JAVA实验站小组成员 学号 名字 职务 20162318 张泰毓 组长 20162303 石亚鑫 组员 20162304 张浩林 组员 201 ...
随机推荐
- Angular开发环境搭建和项目创建以及启动
工具的安装 首先需要安装node,直接在官网下载node,然后一直下一步安装完即可,在安装node的时候自带了npm包管理工具 然后安装Angular CLI,使用npm命令安装输入以下命令 npm ...
- Spring的InitializingBean与DisposableBean方法
在bean初始化的时候,将所有显示提供的属性设置完毕后调用这个方法 org.springframework.beans.factory.InitializingBean#afterProperties ...
- python requests 简单实现易班登录,自动点赞,评论,发表
小编能力有限,本文纯属瞎编,如有雷同,你去打辅导员涩 一.前戏 有个操蛋,操蛋,操蛋的辅导员促使小编成长,原因:易班需要活跃度,辅导员安排班上每个人必须去易班上 写文章,写评论,发投票... 我觉得 ...
- Publisher和Subscriber节点
一.Publisher节点 /*"ros/ros.h"里面包含了ROS系统内最常用的一些头文件,包含此文件,便可以使用ROS的核心功能.*/#include "ros/r ...
- Python2.7-math, cmath
math,cmath 模块,提供了用C标准定义的数学函数,简单说就是效率较高,cmath 不仅有 math 的功能,还增加了计算复数的函数.这两个模块返回的值基本上为 float 类型,除非明确指出返 ...
- CSS3注意点
1.background-Origin属性指定了背景图像的位置区域.content-box, padding-box,和 border-box区域内可以放置背景图像.注意:背景色是不起作用的 2.ba ...
- Android ScrollView 嵌套ListView的替代方案
概要:本例仅提供替代思路. 原需求:实现下图这个布局 要求:头部菜单固定,实现Viewpager.中间的按钮菜单,底部的listview一起能够上下滚动. 做法: 把Viewpager.中间的按钮菜单 ...
- 基于bootstrap的multiple-select下拉控件使用
multiple-select是一款优秀的下拉菜单控件,能够支持单选和多选. 详细参考文档: JS组件系列——两种bootstrap multiselect组件大比拼 multiple-select ...
- excel实用技巧——vlookup函数
1.VLOOKUP函数的套路 VLOOKUP(要找谁,在哪儿找,返回第几列的内容,精确找还是近似找) 最后一个参数: 如果为0或FASLE,用精确匹配方式,而且支持无序查找: 如果为TRUE或被省略, ...
- 20155334 《网络攻防》 Exp9 Web安全基础
<网络攻防> Exp9 Web安全基础 一.实验后回答问题 SQL注入攻击原理,如何防御: 原理: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服 ...