看到网上月薪7K的面试题之红绿灯,自己写了一个,VS2010 ...
来源:百度文库 编辑:超级军网 时间:2024/04/27 23:45:24
/*
使用log4net组件,需在引用里添加该组件,在解决方案的Properties目标框架里选择.NET framework4,然后保存并退出
要想使用日志,需要在项目中添加应用程序配置文件---> App.config
在App.config里如何使用log4net组件初始化语句请在网上找
*/
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Collections;
using System.Threading;
using System.IO;
[assembly: log4net.Config.DOMConfigurator(Watch = true)]
namespace TraLight
{
class VehicleMode//车辆模板类
{
public static List<string> VehicleT = new List<string>();
}
class LogWrite//日志类,使用log4net组件
{
public static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
class VehicleRun//车辆运行主类
{
public static void VRun()
{
while (true)
{
string VName1 = "";//东西向的车
string VName2 = "";//南北向的车
if (Program.VehRunT_NS.Count != 0)
{
VName2 += Program.VehRunT_NS[0];
//Console.WriteLine("南北向: "+VName2+" 准备");
}
if (Program.VehRunT_WE.Count != 0)
{
VName1 += Program.VehRunT_WE[0];
//Console.WriteLine("东西向: "+VName1 + " 准备");
}
if (Program.LightStateGreen == "WE")//东西向绿灯亮了
{
if (VName1 == "W2E" || VName1 == "E2W" || VName1 == "E2S" || VName1 == "W2N" || VName1 == "E2N" || VName1 == "W2S")
{
//string state = Program.LightStateGreen;//处理东西向直行和左转
string state = "东西向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
if (VName1 == "E2S" || VName1 == "W2N")
{
state += " 东西向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (VName2 == "N2W" || VName2 == "S2E")//处理南北向右转
{
//string state = Program.LightStateGreen;
string state = "东西向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 南北向右转");
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_WE.Count == 0)//东西向没车了,要加
{
VehAdd.V_WE_Add();
}
}
if (Program.LightStateGreen == "NS")//南北向绿灯亮了
{
if (VName2 == "N2S" || VName2 == "S2N" || VName2 == "S2W" || VName2 == "N2E" || VName2 == "N2W" || VName2 == "S2E")
{
//string state = Program.LightStateGreen; //处理南北向直行和左转
string state = "南北向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
if (VName2 == "S2W" || VName2 == "N2E")
{
state += " 南北向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (VName1 == "E2N" || VName1 == "W2S")//处理东西向右转
{
//string state = Program.LightStateGreen;
string state = "南北向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 东西向右转");
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_NS.Count == 0)//南北向没车了,要加
{
VehAdd.V_NS_Add();
}
}
}
}
}
class Light//信号灯控制类
{
private DateTime dt = DateTime.Now;
private int start;
private int end;
private int dur;
public Light()
{
start = dt.Second;
end = dt.Second;
dur = 0;
}
public void LightRun(object obj)
{
while (true)
{
dt = DateTime.Now;
end = dt.Second;
//59秒时end被置为59多次,start被置为0多次,所以如果判断条件为dur>=0的话,在1秒内会多次出现end=59,start=0的判定,所以判断条件为dur==1时可靠性较高
//dur = end - start;
//dur=1标明东西向和南北向的红绿灯1秒切换一次,如果想改变,可以在if语句里修改dur==?;
if (dur == 1 && Program.LightStateGreen == "NS")//另一种方法是: if((dur>=1&&Program.LightStateGreen=="NS")&&end!=59)
{
Program.LightStateGreen = "";
Program.LightStateGreen += "WE";
//start = dt.Second;
dur = 0;
Console.WriteLine("东西向绿灯亮");
}
if (dur == 1 && Program.LightStateGreen == "WE")
{
Program.LightStateGreen = "";
Program.LightStateGreen += "NS";
//start = dt.Second;
dur = 0;
Console.WriteLine("南北向绿灯亮");
}
if ((end - start) == 1)
{
dur++;
start = dt.Second;
}
if (start == 59)
{
//Console.WriteLine("start= "+start.ToString());
start = 0;
}
}
}
}
class VehAdd//向队列中添加车辆类
{
public static void V_WE_Add()//添加东西向车辆
{
while (Program.VehRunT_WE.Count == 0)
{
if (Program.VehRunT_WE.Count == 0)
{
int iii = 0;
for (int i = 0; i <= 99; i++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[iii];
if (VName == "W2E" || VName == "E2W" || VName == "E2S" || VName == "W2N" || VName == "E2N" || VName == "W2S")
{
Program.VehRunT_WE.Add(VehicleMode.VehicleT[iii]);//添加东西向车辆
}
iii++;
if (iii == 12)
{
iii = 0;
}
}
}
}
}
public static void V_NS_Add()//添加南北向车辆
{
while (Program.VehRunT_NS.Count == 0)
{
if (Program.VehRunT_NS.Count == 0)
{
int a = 0;
for (int aaa = 0; aaa <= 99; aaa++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[a];
if (VName == "N2S" || VName == "S2N" || VName == "S2W" || VName == "N2E" || VName == "N2W" || VName == "S2E")
{
Program.VehRunT_NS.Add(VehicleMode.VehicleT[a]);//添加南北向车辆
}
a++;
if (a == 12)
{
a = 0;
}
}
}
}
}
}
class Program
{
public static string LightStateGreen="WE";
public static List<string> VehRunT_WE = new List<string>();//东西向的车
public static List<string> VehRunT_NS = new List<string>();//南北向的车
public static string Total = "";//写日志
//public static Mutex myMutex = new Mutex();
static void Main(string[] args)
{
VehicleMode.VehicleT.Add("N2S");//南北向直行
VehicleMode.VehicleT.Add("S2N");//南北向直行
VehicleMode.VehicleT.Add("W2E");//东西向直行
VehicleMode.VehicleT.Add("E2W");//东西向直行
VehicleMode.VehicleT.Add("E2N");//东西向右转
VehicleMode.VehicleT.Add("N2W");//南北向右转
VehicleMode.VehicleT.Add("W2S");//东西向右转
VehicleMode.VehicleT.Add("S2E");//南北向右转
VehicleMode.VehicleT.Add("E2S");//东西向左转
VehicleMode.VehicleT.Add("W2N");//东西向左转
VehicleMode.VehicleT.Add("S2W");//南北向左转
VehicleMode.VehicleT.Add("N2E");//南北向左转
Light myLight = new Light();
Thread LightTransfer = new Thread(myLight.LightRun);
LightTransfer.Start("start");//信号灯开始工作
VehAdd.V_WE_Add();//添加车辆
VehAdd.V_NS_Add();//添加车辆
VehicleRun.VRun();//车辆开始运行
}
}
}/*
使用log4net组件,需在引用里添加该组件,在解决方案的Properties目标框架里选择.NET framework4,然后保存并退出
要想使用日志,需要在项目中添加应用程序配置文件---> App.config
在App.config里如何使用log4net组件初始化语句请在网上找
*/
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Collections;
using System.Threading;
using System.IO;
[assembly: log4net.Config.DOMConfigurator(Watch = true)]
namespace TraLight
{
class VehicleMode//车辆模板类
{
public static List<string> VehicleT = new List<string>();
}
class LogWrite//日志类,使用log4net组件
{
public static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
class VehicleRun//车辆运行主类
{
public static void VRun()
{
while (true)
{
string VName1 = "";//东西向的车
string VName2 = "";//南北向的车
if (Program.VehRunT_NS.Count != 0)
{
VName2 += Program.VehRunT_NS[0];
//Console.WriteLine("南北向: "+VName2+" 准备");
}
if (Program.VehRunT_WE.Count != 0)
{
VName1 += Program.VehRunT_WE[0];
//Console.WriteLine("东西向: "+VName1 + " 准备");
}
if (Program.LightStateGreen == "WE")//东西向绿灯亮了
{
if (VName1 == "W2E" || VName1 == "E2W" || VName1 == "E2S" || VName1 == "W2N" || VName1 == "E2N" || VName1 == "W2S")
{
//string state = Program.LightStateGreen;//处理东西向直行和左转
string state = "东西向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
if (VName1 == "E2S" || VName1 == "W2N")
{
state += " 东西向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (VName2 == "N2W" || VName2 == "S2E")//处理南北向右转
{
//string state = Program.LightStateGreen;
string state = "东西向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 南北向右转");
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_WE.Count == 0)//东西向没车了,要加
{
VehAdd.V_WE_Add();
}
}
if (Program.LightStateGreen == "NS")//南北向绿灯亮了
{
if (VName2 == "N2S" || VName2 == "S2N" || VName2 == "S2W" || VName2 == "N2E" || VName2 == "N2W" || VName2 == "S2E")
{
//string state = Program.LightStateGreen; //处理南北向直行和左转
string state = "南北向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
if (VName2 == "S2W" || VName2 == "N2E")
{
state += " 南北向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (VName1 == "E2N" || VName1 == "W2S")//处理东西向右转
{
//string state = Program.LightStateGreen;
string state = "南北向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 东西向右转");
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_NS.Count == 0)//南北向没车了,要加
{
VehAdd.V_NS_Add();
}
}
}
}
}
class Light//信号灯控制类
{
private DateTime dt = DateTime.Now;
private int start;
private int end;
private int dur;
public Light()
{
start = dt.Second;
end = dt.Second;
dur = 0;
}
public void LightRun(object obj)
{
while (true)
{
dt = DateTime.Now;
end = dt.Second;
//59秒时end被置为59多次,start被置为0多次,所以如果判断条件为dur>=0的话,在1秒内会多次出现end=59,start=0的判定,所以判断条件为dur==1时可靠性较高
//dur = end - start;
//dur=1标明东西向和南北向的红绿灯1秒切换一次,如果想改变,可以在if语句里修改dur==?;
if (dur == 1 && Program.LightStateGreen == "NS")//另一种方法是: if((dur>=1&&Program.LightStateGreen=="NS")&&end!=59)
{
Program.LightStateGreen = "";
Program.LightStateGreen += "WE";
//start = dt.Second;
dur = 0;
Console.WriteLine("东西向绿灯亮");
}
if (dur == 1 && Program.LightStateGreen == "WE")
{
Program.LightStateGreen = "";
Program.LightStateGreen += "NS";
//start = dt.Second;
dur = 0;
Console.WriteLine("南北向绿灯亮");
}
if ((end - start) == 1)
{
dur++;
start = dt.Second;
}
if (start == 59)
{
//Console.WriteLine("start= "+start.ToString());
start = 0;
}
}
}
}
class VehAdd//向队列中添加车辆类
{
public static void V_WE_Add()//添加东西向车辆
{
while (Program.VehRunT_WE.Count == 0)
{
if (Program.VehRunT_WE.Count == 0)
{
int iii = 0;
for (int i = 0; i <= 99; i++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[iii];
if (VName == "W2E" || VName == "E2W" || VName == "E2S" || VName == "W2N" || VName == "E2N" || VName == "W2S")
{
Program.VehRunT_WE.Add(VehicleMode.VehicleT[iii]);//添加东西向车辆
}
iii++;
if (iii == 12)
{
iii = 0;
}
}
}
}
}
public static void V_NS_Add()//添加南北向车辆
{
while (Program.VehRunT_NS.Count == 0)
{
if (Program.VehRunT_NS.Count == 0)
{
int a = 0;
for (int aaa = 0; aaa <= 99; aaa++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[a];
if (VName == "N2S" || VName == "S2N" || VName == "S2W" || VName == "N2E" || VName == "N2W" || VName == "S2E")
{
Program.VehRunT_NS.Add(VehicleMode.VehicleT[a]);//添加南北向车辆
}
a++;
if (a == 12)
{
a = 0;
}
}
}
}
}
}
class Program
{
public static string LightStateGreen="WE";
public static List<string> VehRunT_WE = new List<string>();//东西向的车
public static List<string> VehRunT_NS = new List<string>();//南北向的车
public static string Total = "";//写日志
//public static Mutex myMutex = new Mutex();
static void Main(string[] args)
{
VehicleMode.VehicleT.Add("N2S");//南北向直行
VehicleMode.VehicleT.Add("S2N");//南北向直行
VehicleMode.VehicleT.Add("W2E");//东西向直行
VehicleMode.VehicleT.Add("E2W");//东西向直行
VehicleMode.VehicleT.Add("E2N");//东西向右转
VehicleMode.VehicleT.Add("N2W");//南北向右转
VehicleMode.VehicleT.Add("W2S");//东西向右转
VehicleMode.VehicleT.Add("S2E");//南北向右转
VehicleMode.VehicleT.Add("E2S");//东西向左转
VehicleMode.VehicleT.Add("W2N");//东西向左转
VehicleMode.VehicleT.Add("S2W");//南北向左转
VehicleMode.VehicleT.Add("N2E");//南北向左转
Light myLight = new Light();
Thread LightTransfer = new Thread(myLight.LightRun);
LightTransfer.Start("start");//信号灯开始工作
VehAdd.V_WE_Add();//添加车辆
VehAdd.V_NS_Add();//添加车辆
VehicleRun.VRun();//车辆开始运行
}
}
}
使用log4net组件,需在引用里添加该组件,在解决方案的Properties目标框架里选择.NET framework4,然后保存并退出
要想使用日志,需要在项目中添加应用程序配置文件---> App.config
在App.config里如何使用log4net组件初始化语句请在网上找
*/
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Collections;
using System.Threading;
using System.IO;
[assembly: log4net.Config.DOMConfigurator(Watch = true)]
namespace TraLight
{
class VehicleMode//车辆模板类
{
public static List<string> VehicleT = new List<string>();
}
class LogWrite//日志类,使用log4net组件
{
public static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
class VehicleRun//车辆运行主类
{
public static void VRun()
{
while (true)
{
string VName1 = "";//东西向的车
string VName2 = "";//南北向的车
if (Program.VehRunT_NS.Count != 0)
{
VName2 += Program.VehRunT_NS[0];
//Console.WriteLine("南北向: "+VName2+" 准备");
}
if (Program.VehRunT_WE.Count != 0)
{
VName1 += Program.VehRunT_WE[0];
//Console.WriteLine("东西向: "+VName1 + " 准备");
}
if (Program.LightStateGreen == "WE")//东西向绿灯亮了
{
if (VName1 == "W2E" || VName1 == "E2W" || VName1 == "E2S" || VName1 == "W2N" || VName1 == "E2N" || VName1 == "W2S")
{
//string state = Program.LightStateGreen;//处理东西向直行和左转
string state = "东西向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
if (VName1 == "E2S" || VName1 == "W2N")
{
state += " 东西向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (VName2 == "N2W" || VName2 == "S2E")//处理南北向右转
{
//string state = Program.LightStateGreen;
string state = "东西向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 南北向右转");
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_WE.Count == 0)//东西向没车了,要加
{
VehAdd.V_WE_Add();
}
}
if (Program.LightStateGreen == "NS")//南北向绿灯亮了
{
if (VName2 == "N2S" || VName2 == "S2N" || VName2 == "S2W" || VName2 == "N2E" || VName2 == "N2W" || VName2 == "S2E")
{
//string state = Program.LightStateGreen; //处理南北向直行和左转
string state = "南北向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
if (VName2 == "S2W" || VName2 == "N2E")
{
state += " 南北向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (VName1 == "E2N" || VName1 == "W2S")//处理东西向右转
{
//string state = Program.LightStateGreen;
string state = "南北向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 东西向右转");
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_NS.Count == 0)//南北向没车了,要加
{
VehAdd.V_NS_Add();
}
}
}
}
}
class Light//信号灯控制类
{
private DateTime dt = DateTime.Now;
private int start;
private int end;
private int dur;
public Light()
{
start = dt.Second;
end = dt.Second;
dur = 0;
}
public void LightRun(object obj)
{
while (true)
{
dt = DateTime.Now;
end = dt.Second;
//59秒时end被置为59多次,start被置为0多次,所以如果判断条件为dur>=0的话,在1秒内会多次出现end=59,start=0的判定,所以判断条件为dur==1时可靠性较高
//dur = end - start;
//dur=1标明东西向和南北向的红绿灯1秒切换一次,如果想改变,可以在if语句里修改dur==?;
if (dur == 1 && Program.LightStateGreen == "NS")//另一种方法是: if((dur>=1&&Program.LightStateGreen=="NS")&&end!=59)
{
Program.LightStateGreen = "";
Program.LightStateGreen += "WE";
//start = dt.Second;
dur = 0;
Console.WriteLine("东西向绿灯亮");
}
if (dur == 1 && Program.LightStateGreen == "WE")
{
Program.LightStateGreen = "";
Program.LightStateGreen += "NS";
//start = dt.Second;
dur = 0;
Console.WriteLine("南北向绿灯亮");
}
if ((end - start) == 1)
{
dur++;
start = dt.Second;
}
if (start == 59)
{
//Console.WriteLine("start= "+start.ToString());
start = 0;
}
}
}
}
class VehAdd//向队列中添加车辆类
{
public static void V_WE_Add()//添加东西向车辆
{
while (Program.VehRunT_WE.Count == 0)
{
if (Program.VehRunT_WE.Count == 0)
{
int iii = 0;
for (int i = 0; i <= 99; i++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[iii];
if (VName == "W2E" || VName == "E2W" || VName == "E2S" || VName == "W2N" || VName == "E2N" || VName == "W2S")
{
Program.VehRunT_WE.Add(VehicleMode.VehicleT[iii]);//添加东西向车辆
}
iii++;
if (iii == 12)
{
iii = 0;
}
}
}
}
}
public static void V_NS_Add()//添加南北向车辆
{
while (Program.VehRunT_NS.Count == 0)
{
if (Program.VehRunT_NS.Count == 0)
{
int a = 0;
for (int aaa = 0; aaa <= 99; aaa++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[a];
if (VName == "N2S" || VName == "S2N" || VName == "S2W" || VName == "N2E" || VName == "N2W" || VName == "S2E")
{
Program.VehRunT_NS.Add(VehicleMode.VehicleT[a]);//添加南北向车辆
}
a++;
if (a == 12)
{
a = 0;
}
}
}
}
}
}
class Program
{
public static string LightStateGreen="WE";
public static List<string> VehRunT_WE = new List<string>();//东西向的车
public static List<string> VehRunT_NS = new List<string>();//南北向的车
public static string Total = "";//写日志
//public static Mutex myMutex = new Mutex();
static void Main(string[] args)
{
VehicleMode.VehicleT.Add("N2S");//南北向直行
VehicleMode.VehicleT.Add("S2N");//南北向直行
VehicleMode.VehicleT.Add("W2E");//东西向直行
VehicleMode.VehicleT.Add("E2W");//东西向直行
VehicleMode.VehicleT.Add("E2N");//东西向右转
VehicleMode.VehicleT.Add("N2W");//南北向右转
VehicleMode.VehicleT.Add("W2S");//东西向右转
VehicleMode.VehicleT.Add("S2E");//南北向右转
VehicleMode.VehicleT.Add("E2S");//东西向左转
VehicleMode.VehicleT.Add("W2N");//东西向左转
VehicleMode.VehicleT.Add("S2W");//南北向左转
VehicleMode.VehicleT.Add("N2E");//南北向左转
Light myLight = new Light();
Thread LightTransfer = new Thread(myLight.LightRun);
LightTransfer.Start("start");//信号灯开始工作
VehAdd.V_WE_Add();//添加车辆
VehAdd.V_NS_Add();//添加车辆
VehicleRun.VRun();//车辆开始运行
}
}
}/*
使用log4net组件,需在引用里添加该组件,在解决方案的Properties目标框架里选择.NET framework4,然后保存并退出
要想使用日志,需要在项目中添加应用程序配置文件---> App.config
在App.config里如何使用log4net组件初始化语句请在网上找
*/
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Collections;
using System.Threading;
using System.IO;
[assembly: log4net.Config.DOMConfigurator(Watch = true)]
namespace TraLight
{
class VehicleMode//车辆模板类
{
public static List<string> VehicleT = new List<string>();
}
class LogWrite//日志类,使用log4net组件
{
public static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
class VehicleRun//车辆运行主类
{
public static void VRun()
{
while (true)
{
string VName1 = "";//东西向的车
string VName2 = "";//南北向的车
if (Program.VehRunT_NS.Count != 0)
{
VName2 += Program.VehRunT_NS[0];
//Console.WriteLine("南北向: "+VName2+" 准备");
}
if (Program.VehRunT_WE.Count != 0)
{
VName1 += Program.VehRunT_WE[0];
//Console.WriteLine("东西向: "+VName1 + " 准备");
}
if (Program.LightStateGreen == "WE")//东西向绿灯亮了
{
if (VName1 == "W2E" || VName1 == "E2W" || VName1 == "E2S" || VName1 == "W2N" || VName1 == "E2N" || VName1 == "W2S")
{
//string state = Program.LightStateGreen;//处理东西向直行和左转
string state = "东西向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
if (VName1 == "E2S" || VName1 == "W2N")
{
state += " 东西向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (VName2 == "N2W" || VName2 == "S2E")//处理南北向右转
{
//string state = Program.LightStateGreen;
string state = "东西向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 南北向右转");
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_WE.Count == 0)//东西向没车了,要加
{
VehAdd.V_WE_Add();
}
}
if (Program.LightStateGreen == "NS")//南北向绿灯亮了
{
if (VName2 == "N2S" || VName2 == "S2N" || VName2 == "S2W" || VName2 == "N2E" || VName2 == "N2W" || VName2 == "S2E")
{
//string state = Program.LightStateGreen; //处理南北向直行和左转
string state = "南北向绿灯亮: ";
state += VName2;
Console.WriteLine(state + " 驶过");
if (VName2 == "S2W" || VName2 == "N2E")
{
state += " 南北向左转";
}
LogWrite.myLogger.Info(state);
Program.VehRunT_NS.RemoveAt(0);
Thread.Sleep(350);
}
if (VName1 == "E2N" || VName1 == "W2S")//处理东西向右转
{
//string state = Program.LightStateGreen;
string state = "南北向绿灯亮: ";
state += VName1;
Console.WriteLine(state + " 驶过");
LogWrite.myLogger.Info(state + " 东西向右转");
Program.VehRunT_WE.RemoveAt(0);
Thread.Sleep(350);
}
if (Program.VehRunT_NS.Count == 0)//南北向没车了,要加
{
VehAdd.V_NS_Add();
}
}
}
}
}
class Light//信号灯控制类
{
private DateTime dt = DateTime.Now;
private int start;
private int end;
private int dur;
public Light()
{
start = dt.Second;
end = dt.Second;
dur = 0;
}
public void LightRun(object obj)
{
while (true)
{
dt = DateTime.Now;
end = dt.Second;
//59秒时end被置为59多次,start被置为0多次,所以如果判断条件为dur>=0的话,在1秒内会多次出现end=59,start=0的判定,所以判断条件为dur==1时可靠性较高
//dur = end - start;
//dur=1标明东西向和南北向的红绿灯1秒切换一次,如果想改变,可以在if语句里修改dur==?;
if (dur == 1 && Program.LightStateGreen == "NS")//另一种方法是: if((dur>=1&&Program.LightStateGreen=="NS")&&end!=59)
{
Program.LightStateGreen = "";
Program.LightStateGreen += "WE";
//start = dt.Second;
dur = 0;
Console.WriteLine("东西向绿灯亮");
}
if (dur == 1 && Program.LightStateGreen == "WE")
{
Program.LightStateGreen = "";
Program.LightStateGreen += "NS";
//start = dt.Second;
dur = 0;
Console.WriteLine("南北向绿灯亮");
}
if ((end - start) == 1)
{
dur++;
start = dt.Second;
}
if (start == 59)
{
//Console.WriteLine("start= "+start.ToString());
start = 0;
}
}
}
}
class VehAdd//向队列中添加车辆类
{
public static void V_WE_Add()//添加东西向车辆
{
while (Program.VehRunT_WE.Count == 0)
{
if (Program.VehRunT_WE.Count == 0)
{
int iii = 0;
for (int i = 0; i <= 99; i++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[iii];
if (VName == "W2E" || VName == "E2W" || VName == "E2S" || VName == "W2N" || VName == "E2N" || VName == "W2S")
{
Program.VehRunT_WE.Add(VehicleMode.VehicleT[iii]);//添加东西向车辆
}
iii++;
if (iii == 12)
{
iii = 0;
}
}
}
}
}
public static void V_NS_Add()//添加南北向车辆
{
while (Program.VehRunT_NS.Count == 0)
{
if (Program.VehRunT_NS.Count == 0)
{
int a = 0;
for (int aaa = 0; aaa <= 99; aaa++)
{
//Random ran = new Random();
//int RandKey = ran.Next(0, 12);
string VName = VehicleMode.VehicleT[a];
if (VName == "N2S" || VName == "S2N" || VName == "S2W" || VName == "N2E" || VName == "N2W" || VName == "S2E")
{
Program.VehRunT_NS.Add(VehicleMode.VehicleT[a]);//添加南北向车辆
}
a++;
if (a == 12)
{
a = 0;
}
}
}
}
}
}
class Program
{
public static string LightStateGreen="WE";
public static List<string> VehRunT_WE = new List<string>();//东西向的车
public static List<string> VehRunT_NS = new List<string>();//南北向的车
public static string Total = "";//写日志
//public static Mutex myMutex = new Mutex();
static void Main(string[] args)
{
VehicleMode.VehicleT.Add("N2S");//南北向直行
VehicleMode.VehicleT.Add("S2N");//南北向直行
VehicleMode.VehicleT.Add("W2E");//东西向直行
VehicleMode.VehicleT.Add("E2W");//东西向直行
VehicleMode.VehicleT.Add("E2N");//东西向右转
VehicleMode.VehicleT.Add("N2W");//南北向右转
VehicleMode.VehicleT.Add("W2S");//东西向右转
VehicleMode.VehicleT.Add("S2E");//南北向右转
VehicleMode.VehicleT.Add("E2S");//东西向左转
VehicleMode.VehicleT.Add("W2N");//东西向左转
VehicleMode.VehicleT.Add("S2W");//南北向左转
VehicleMode.VehicleT.Add("N2E");//南北向左转
Light myLight = new Light();
Thread LightTransfer = new Thread(myLight.LightRun);
LightTransfer.Start("start");//信号灯开始工作
VehAdd.V_WE_Add();//添加车辆
VehAdd.V_NS_Add();//添加车辆
VehicleRun.VRun();//车辆开始运行
}
}
}
这个为什么不发在CSDN之类的地方
leekkeek 发表于 2015-4-9 13:56
这个为什么不发在CSDN之类的地方
我这边注册完时不时登不上去
这个为什么不发在CSDN之类的地方
我这边注册完时不时登不上去
代码超过20行,不看
华府小厮 发表于 2015-4-9 14:11
代码超过20行,不看
原来都是不同的类文件里的,超大没法分文件保存
代码超过20行,不看
原来都是不同的类文件里的,超大没法分文件保存
题目先写出来吧。然后让大家看啥?写得对不对?代码是否符合规范?寻求改进意见?
konming 发表于 2015-4-9 15:07
题目先写出来吧。然后让大家看啥?写得对不对?代码是否符合规范?寻求改进意见?
寻求改进意见,好像信号灯那里转换的不是特别可靠
题目先写出来吧。然后让大家看啥?写得对不对?代码是否符合规范?寻求改进意见?
寻求改进意见,好像信号灯那里转换的不是特别可靠
和谐电3D 发表于 2015-4-9 15:30
寻求改进意见,好像信号灯那里转换的不是特别可靠
题目和要求呢?
寻求改进意见,好像信号灯那里转换的不是特别可靠
题目和要求呢?
和谐电3D 发表于 2015-4-9 15:30
寻求改进意见,好像信号灯那里转换的不是特别可靠
这个其实就是一点典型的有限状态自动机,你先把算法比划清楚了,剩下的码字就容易多了。
寻求改进意见,好像信号灯那里转换的不是特别可靠
这个其实就是一点典型的有限状态自动机,你先把算法比划清楚了,剩下的码字就容易多了。
你要大家看算法是不是有问题,写虚代码就是了。
一帮子人整天上班看代码,轻松一会刷刷论坛还要看代码,我一看超过一屏就没兴趣了。
一帮子人整天上班看代码,轻松一会刷刷论坛还要看代码,我一看超过一屏就没兴趣了。