//排夜班
int y ;//年轻护士人数
Random ran=new Random();
for(int x=1;x<8;x++)
for(int m=0;m<i5;m++)
{
//i5:用户所选拍夜班人数
table.setValueAt("夜班",row-i5+m,0);
//row-i5+m:在表格的后i5行显示
table.setValueAt(youngname[ran.nextInt(y)],row-i5+m,x);
//youngname[ran.nextInt(y)]:在年轻护士中产生随机护士名单
}
??问题:
现在的算法,有可能将某一护士连排俩夜班,这种问题该怎么解决?能不能帮忙写一下算法?
int y ;//年轻护士人数
Random ran=new Random();
for(int x=1;x<8;x++)
for(int m=0;m<i5;m++)
{
//i5:用户所选拍夜班人数
table.setValueAt("夜班",row-i5+m,0);
//row-i5+m:在表格的后i5行显示
table.setValueAt(youngname[ran.nextInt(y)],row-i5+m,x);
//youngname[ran.nextInt(y)]:在年轻护士中产生随机护士名单
}
??问题:
现在的算法,有可能将某一护士连排俩夜班,这种问题该怎么解决?能不能帮忙写一下算法?
//将数据库中保存的护士读到id[],name[],age[]
try{
sql="SELECT * FROM nurse";
rs=db.getResult(sql);
ResultSetMetaData rsmd=rs.getMetaData();
rs.last();
int rNum=rs.getRow();
rs.first();
id=new String[rNum];
name=new String[rNum];
age=new int[rNum];
while(rs.next())
{
//rs.next();
id[i]=(String)rs.getObject("ID");
name[i]=(String)rs.getObject("name");
age[i]=Integer.parseInt(rs.getObject("age").toString());
this.i++;
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"读取信息错误!");
}
//排班人数由用户所定:i2,i3,i4、i5
int i1 = Integer.parseInt((String)comb1.getSelectedItem());
int i2 = Integer.parseInt((String)comb2.getSelectedItem());
int i3 = Integer.parseInt((String)comb3.getSelectedItem());
int i4 = Integer.parseInt((String)comb4.getSelectedItem());
int i5 = Integer.parseInt((String)comb5.getSelectedItem());
row=i2+i3+i4+i5;
//区分夜班年龄
youngid=new String[i];
youngname=new String[i];
oldid=new String[i];
oldname=new String[i];
for(int j=0;j<i;j++){
if(age[j]<i1){
youngid[y]=id[j];
youngname[y]=name[j];
y++;
}
else{
oldid[d]=id[j];
oldname[d]=name[j];
d++;
}
}
//定义表格
model = new DefaultTableModel(columnNames, row);
table = new JTable(model);
JScrollPane tablePane = new JScrollPane(table);
con.add(tablePane, BorderLayout.CENTER);
//先排夜班
Random ran=new Random();
for(int x=1;x<8;x++)
for(int m=0;m<i5;m++)
{
//表格第一列为班种
table.setValueAt("夜班",row-i5+m,0);
???table.setValueAt(youngname[ran.nextInt(y)],row-i5+m,x); }
???怎么写排班才合理,才能做到一周上班数公平,班次又不冲突。
List listHs = new ArrayList();//定义护士list集合
//添加几个护士
listHs.add("护士1");
listHs.add("护士2");
listHs.add("护士3");
listHs.add("护士4");
listHs.add("护士5");
listHs.add("护士6");
listHs.add("护士7");
this.start(listHs);
}
/**
* 给护士排班
* @param listHs
* */
public void start(List listHs){
int iHsNum = listHs.size();
int iDelHs = 0;
if(iHsNum == 0 ){
return;
}
Random random = new Random();
iDelHs = random.nextInt(iHsNum);
//如果先中此护士,那么就把此护士从队列中移除
//当然你可以把移除的护士保存在一个相对全局的变量中(List),这样就得到护士的值班次序了
System.out.println(listHs.remove(iDelHs).toString());
this.start(listHs);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test();
}}