您的位置:首页 > 编程语言 > Java开发

java之 ------ 可变参数和卫条件

2015-06-09 08:35 369 查看

可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。

可变参数必须位于最后一项。当可变参数个数多于一个时,必将有一个不是最后一项,所以只支持有一个可变参数。

可变参数的书写形式如:

int add(int x,int ...args){ 方法体 }

... 位于变量类型和变量名之间,前后有无空格都可以;

调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

条件逻辑判断型的应用(模拟人工推理)

/*
 有人邀请A,B,C,D,E,F 6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
 1)A,B两人至少有1人参加会议;
 2)A,E,F 3人中有2人参加会议;
 3)B和C两人一致决定,要么两人都去,要么两人都不去;
 4)A,D两人中只1人参加会议;
 5)C,D两人中也只要1人参加会议;
 6)如果D不去,那么E也决定不去。
 那么最后究竟有哪几个人参加了会议呢?
 */
public class Meeting {

	public static void main(String[] args) {
		int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
		/*for (int a1 = 1; a1 <= 2; a1++) {
			for (int a2 = 1; a2 <= 2; a2++) {
				for (int a3 = 1; a3 <= 2; a3++) {
					for (int a4 = 1; a4 <= 2; a4++) {
						for (int a5 = 1; a5 <= 2; a5++) {
							for (int a6 = 1; a6 <= 2; a6++) {
							*/
		//类似上面6个for
		for (int i = 0; i <= 63; i++) {//二进制表示六个人( 000000 ~ 111111  )去还是不去  1表示去 ,0表示不去
			a = ((i & 1) == 0) ? 0 : 1;
			b = ((i & 2) == 0) ? 0 : 1;
			c = ((i & 4) == 0) ? 0 : 1;
			d = ((i & 8) == 0) ? 0 : 1;
			e = ((i & 16) == 0) ? 0 : 1;
			f = ((i & 32) == 0) ? 0 : 1;
			if (fun(a, b, c, d, e, f)) {
				System.out.println("a= " + a + " b= " + b + " c= " + c + " d= "
						+ d + " e= " + e + " f= " + f);
			}
		}
	}
	
	//统计去的人数
	private static int countGo(int... args) {//可变参数
		int sum = 0;
		for (int a : args) {
			if (a == 1) {//1表示去  0表示不去
				sum++;
			}
		}
		return sum;
	}

	//判读是否符合条件
	private static boolean fun(int a, int b, int c, int d, int e, int f) {
		// 卫条件,每个卫条件好象一个卫兵一样,专门拦截该条件的非法结果数据。经过所有卫兵,剩下的数据就是合法的
		if (!(countGo(a, b) >= 1)) {
			return false;
		}
		if (!(countGo(a, e, f) == 2)) {
			return false;
		}
		if (!(countGo(b, c) == 0 || countGo(b, c) == 2)) {
			return false;
		}
		if (!(countGo(a, d) == 1)) {
			return false;
		}
		if (!(countGo(c, d) == 1)) {
			return false;
		}
		if (countGo(d) == 0 && countGo(e) == 1) {
			return false;
		}

		return true;
	}

}
//结果:a= 1 b= 1 c= 1 d= 0 e= 0 f= 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: