直接上代码,自己看。
package student_on_duty;
/**
* 1. 这是一个最简单值日生轮班排班的程序。只用到了一维数组、for循环和if判断
* 2. 现在可以输入姓名、星期、日期来分别查看不同的数据
* 3. 关于去掉双休后在数组产生null值得问题,我用list另外写了一个DeleteArrayNull
* 的 方法放在了method1里面。这里直接导入了(这个方法我放在最后贴出来)
* 4. 我这里直接使用的系统时间, 有多少人就产生多少人的排班 。没有循环人,因为感觉没多大用。
* 使用完了再产生一次排班就好了,何必写哪没用的东西。
* 5. 输入条 件有漏洞,特别是日期这里。
* 6.有改进的地方,把数组换成list集合,可以进行人员的删除和增加。我这里没有用,直接写死了
* 7. 几个数组的长度也写死了,可以自己拿过去用的时候自己改改。毕竟这里只是一个例子。
*8. 注释是我自己调试和修改程序的痕迹 = = !!
* 9. 写的比较复杂。难点就是怎么去掉系统的双休 -- ! !
*
* @author 作者
*
*/
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import method1.DeleteArrayNull;
public class StudentOnDuty {
public static void main(String[] args) {
// 用户输入窗口
String aa = null ;
Calendar calendar = Calendar.getInstance();
System.out.println("输入下列查询条件之一:(格式: 日期20xx-0x-0x、 姓名xxx、星期xxx) 开始查询!");
Scanner sc=new Scanner(System.in);
String[]student_on_duty={"赵","钱","孙","李","周","吴","郑","王",
"冯","陈","褚","卫","蒋 ","沈","韩","杨",
"朱","秦","尤","许","何","吕","施","张"}; //人员名单
//定义各种数组
String [] riqi=new String[50] ; //值班日期
String [] paihaohou=new String[24] ; //排班后名单
String [] newriqi=new String[24];
// 这个日期判断会导致日期集合里面出现NULL值,
for(int i=0;i<riqi.length;i++) {
calendar.add(Calendar.DATE, +1);
Date ss=calendar.getTime();
aa=new SimpleDateFormat( "yyyy-MM-dd EEEE").format(ss) ;
if( (!aa.contains("星期六"))) {
if((!aa.contains("星期日"))) {
riqi[i]=aa;
}
}
}
//去掉riqi数组里面的null值,并把新产生的数组赋值给 newriqi
newriqi = DeleteArrayNull.deleteArrayNull(riqi);
//姓名和日期星期匹配
for(int j=0;j< student_on_duty.length; j++) {
// 姓名和日期匹配后写入数组
paihaohou[j] = (newriqi[j]+"是:"+student_on_duty[j]+"值日。");
// System.out.println(paihaohou[j]); //查看 paihaohou数组值得产生
}
//编写查询条件 1.姓名 2.星期 3.日期
try {
System.out.println("输入查询条件:");
String query_name =sc.next();
for(int i=0;i< paihaohou.length;i++) {
if( paihaohou[i].contains( query_name )) {
System.out.println(paihaohou[i]);
}
}
} // 最好写个异常方法类,这 里直接拿来用
catch(IndexOutOfBoundsException e) {
System.out.println("超过查询范围了,请重新输入");
}catch(NullPointerException e) {
System.out.println("没有查到相关信息,请重新输入查询条件!");
}
finally {
System.out.println("谢谢使用!");
}
sc.close();
}
}
//
// }
// break;
//
// // 按星期查找
// case 1 : { System.out.println("输入星期:");
// String query_week =sc.next();
// for(int i=0;i< paihaohou.length;i++) {
// if( paihaohou[i].contains(query_week )) {
// System.out.println(paihaohou[i]);
// }
// }
// };
// break ;
//
// //按日期查找
// case 2:{ System.out.println("输入日期:");
// String query_date =sc.next();
// for(int i=0;i< paihaohou.length;i++) {
// if( paihaohou[i].contains(query_date )) {
// System.out.println(paihaohou[i]);
// }
// }
// };
// break;
// }
去掉String数组NULL 值的方法:
package method1;
import java.util.ArrayList;
/***
* 去除String数组中的空值
*/
public class DeleteArrayNull {
public static String[] deleteArrayNull(String string[]) {
String strArr[] = string;
// step1: 定义一个list列表,并循环赋值
ArrayList<String> strList = new ArrayList<String>();
for (int i = 0; i < strArr.length; i++) {
strList.add(strArr[i]);
}
// step2: 删除list列表中所有的空值
while (strList.remove(null));
while (strList.remove(""));
// step3: 把list列表转换给一个新定义的中间数组,并赋值给它
String strArrLast[] = strList.toArray(new String[strList.size()]);
return strArrLast;
}
}
运行结果: