请用Java多线程模拟自动路灯控制系统:
请用Java多线程模拟自动路灯控制系统,要求如下:1)东西方向为主干道,除在以下情况下,东西方向一直保持绿灯,南北方向一直保持红灯。2)南北方向等待通行的车辆到达5辆或以...
请用Java多线程模拟自动路灯控制系统,要求如下:
1)东西方向为主干道,除在以下情况下,东西方向一直保持绿灯,南北方向一直保持红灯。
2)南北方向等待通行的车辆到达5辆或以上时,南北方向为绿灯,东西方向转为红灯。通行结束后,恢复原状。
3)南北方向等待通行的车辆,等待时间超过2分钟时,南北方向为绿灯,东西方向转为红灯。通行结束后,恢复原状。
4)为避免通行混乱,灯的颜色必须保持15秒以上才能进行转换。(如果遇到与以上情况冲突,以本条优先)
5)假设有一个感应器,能随时探测到各路面等待通行的车辆的数量。 展开
1)东西方向为主干道,除在以下情况下,东西方向一直保持绿灯,南北方向一直保持红灯。
2)南北方向等待通行的车辆到达5辆或以上时,南北方向为绿灯,东西方向转为红灯。通行结束后,恢复原状。
3)南北方向等待通行的车辆,等待时间超过2分钟时,南北方向为绿灯,东西方向转为红灯。通行结束后,恢复原状。
4)为避免通行混乱,灯的颜色必须保持15秒以上才能进行转换。(如果遇到与以上情况冲突,以本条优先)
5)假设有一个感应器,能随时探测到各路面等待通行的车辆的数量。 展开
4个回答
展开全部
/*小弟,会的只有这些,基本的功能吧!我信相还有很多地方还要改进,但我的能力只能去这里了,要等大侠位完善它了!*/
class A implements Runnable { //A为北
private Crossing crossing = null ;
public A(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
int j = 0 ;
for(int i = 0 ; i < 5 ; i++){
j++ ;
this.crossing.ACset("车辆从A到B,第 " + j + "号车辆") ;
}
}
}
class B implements Runnable { //B为南
private Crossing crossing = null ;
public B(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
for(int i = 0 ; i < 5 ; i++){
this.crossing.BDget() ;
}
}
}
class C implements Runnable { //C为西
private Crossing crossing = null ;
public C(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
int j = 0 ;
for(int i = 0 ; i < 5 ; i++){
j++ ;
this.crossing.ACset("车辆从C到D,第 " + j + "号车辆") ;
}
}
}
class D implements Runnable { //D为东
private Crossing crossing = null ;
public D(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
for(int i = 0 ; i < 5 ; i++){
this.crossing.BDget() ;
}
}
}
public class Crossing { //为路口
private String car = "车辆从A到B" ;
private boolean flag = false ; //默认是false
/*
*1、flag = true,表示绿灯,可以A往B;
*2、flag = false,表示红灯,可以C往D;
**/
public void setCar(String car){
this.car = car ;
}
public String getCar(){
return car ;
}
public synchronized void ACset(String car){ //A 和 C去的去的方向
if(flag == false){
try {
Thread.sleep(20000) ; //红绿灯的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
this.setCar(car) ;
}
this.flag = true ;
if(flag){
this.setCar(car) ;
} else {
try {
Thread.sleep(20000) ; //红绿灯的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.flag = false ;
}
public synchronized void BDget(){ //B 和 D得到的车辆
if(flag){
System.out.println(this.getCar()) ;
}
this.flag = false ;
if(flag = false){
System.out.println(this.getCar()) ;
}
this.flag = true ;
}
public static void main(String[] args) {
Crossing crossing = new Crossing() ;
A a = new A(crossing) ;
B b = new B(crossing) ;
C c = new C(crossing) ;
D d = new D(crossing) ;
new Thread(a).start() ;
new Thread(b).start() ;
new Thread(c).start() ;
new Thread(d).start() ;
}
}
class A implements Runnable { //A为北
private Crossing crossing = null ;
public A(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
int j = 0 ;
for(int i = 0 ; i < 5 ; i++){
j++ ;
this.crossing.ACset("车辆从A到B,第 " + j + "号车辆") ;
}
}
}
class B implements Runnable { //B为南
private Crossing crossing = null ;
public B(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
for(int i = 0 ; i < 5 ; i++){
this.crossing.BDget() ;
}
}
}
class C implements Runnable { //C为西
private Crossing crossing = null ;
public C(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
int j = 0 ;
for(int i = 0 ; i < 5 ; i++){
j++ ;
this.crossing.ACset("车辆从C到D,第 " + j + "号车辆") ;
}
}
}
class D implements Runnable { //D为东
private Crossing crossing = null ;
public D(Crossing crossing){
this.crossing = crossing ;
}
public void run(){
for(int i = 0 ; i < 5 ; i++){
this.crossing.BDget() ;
}
}
}
public class Crossing { //为路口
private String car = "车辆从A到B" ;
private boolean flag = false ; //默认是false
/*
*1、flag = true,表示绿灯,可以A往B;
*2、flag = false,表示红灯,可以C往D;
**/
public void setCar(String car){
this.car = car ;
}
public String getCar(){
return car ;
}
public synchronized void ACset(String car){ //A 和 C去的去的方向
if(flag == false){
try {
Thread.sleep(20000) ; //红绿灯的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
this.setCar(car) ;
}
this.flag = true ;
if(flag){
this.setCar(car) ;
} else {
try {
Thread.sleep(20000) ; //红绿灯的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.flag = false ;
}
public synchronized void BDget(){ //B 和 D得到的车辆
if(flag){
System.out.println(this.getCar()) ;
}
this.flag = false ;
if(flag = false){
System.out.println(this.getCar()) ;
}
this.flag = true ;
}
public static void main(String[] args) {
Crossing crossing = new Crossing() ;
A a = new A(crossing) ;
B b = new B(crossing) ;
C c = new C(crossing) ;
D d = new D(crossing) ;
new Thread(a).start() ;
new Thread(b).start() ;
new Thread(c).start() ;
new Thread(d).start() ;
}
}
奇峰
2024-06-11 广告
2024-06-11 广告
好不好,谁更好这个问题是见仁见智的。这个需要顾客根据自身的情况,去选择合适自己的公司。更多详情建议可以咨询一下广州奇峰机电设备有限公司!广州奇峰机电设备有限公司主要为客户提供专业的可编程控制器产品,公司拥有专业的团队以及丰富的经验,更多详情...
点击进入详情页
本回答由奇峰提供
展开全部
你要干什么,不明白什么意思,是要源码吗,那你的分给的也太少了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题真的问得好啊,没想到学了Java,这么久还能有这样的模拟效果啊~~~ 学习了~~回去研究
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
张孝祥讲过这个类似的问题,但是我也没有源码.可以再找一找资料
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询