java课堂练习之可变参数与卫条件

/*

有人邀请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也决定不去。

那么最后究竟有哪几个人参加了会议呢?

*/

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

可变参数的书写形式如:

void a(boolean a,int ...args){  方法体 }

1)必须是三点;

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

3)可变参数的应用实际上是java虚拟机动态的开了一个数组;

4)三点后不能再加其他东西。

package cn.hncu.p37.meeting;

public class Meeting1 {
	public static void main(String[] args) {
		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++) {
								if (ok(a1, a2, a3, a4, a5, a6)) {
									System.out.println("a1--"+a1+
											"\na2--"+a2+
											"\na3--"+a3+
											"\na4--"+a4+
											"\na5--"+a5+
											"\na6--"+a6
														);
									break;
								}
							}
						}
					}
				}
			}
		}
		//类似上面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 boolean ok(int a1, int a2, int a3, int a4, int a5, int a6) {
		if (!(countGo(a1, a2) >= 1)) {// A,B两人至少有1人参加会议;
			return false;
		}
		if (!(countGo(a1, a5, a6) == 2)) {// A,E,F 3人中有2人参加会议;
			return false;
		}
		if (!(countGo(a2, a3) == 2 || countGo(a2, a3) == 0)) {// B和C两人一致决定,要么两人都去,要么两人都不去;
			return false;
		}
		if (!(countGo(a1, a4) == 1)) {// A,D两人中只1人参加会议;
			return false;
		}
		if (!(countGo(a3, a4) == 1)) {// C,D两人中也只要1人参加会议;
			return false;
		}
		if (countGo(a4) == 0 && countGo(a5) == 1) {// 如果D不去,那么E也决定不去。
			return false;
		}
		return true;
	}

	private static int countGo(int... mee) {
		int count = 0;
		for (int me : mee) {
			if (me == 1) {
				count++;
			}
		}
		return count;
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-30 03:04:31

java课堂练习之可变参数与卫条件的相关文章

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

可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理. 可变参数必须位于最后一项.当可变参数个数多于一个时,必将有一个不是最后一项,所以只支持有一个可变参数. 可变参数的书写形式如: int add(int x,int ...args){  方法体 } ... 位于变量类型和变量名之间,前后有无空格都可以: 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数. 条件逻辑判断型的应用(模拟人工推理) /* 有人邀请A,B,C,D,

java中形参的可变参数的定义(如String... args) .

如果有下面的一个笔试题: 已知我们有如下的调用关系 logIt("log message 1 "); logIt("log message2","log message3"); logIt("log message4","log message5","log message6"); 请问下面的答案中哪个是正确的 A. public void logIt(String * msgs) B.

java基础-java与c#的可变参数

正文 可变参数,必须最为参数的最后一个参数:可变参数只能有一个: c#可变参数例子: class Program { static void Main(string[] args) { Test t = new Test(); t.say("li", "wang"); Console.Read(); } } class Test { int num = 0; public void say(params string[] name) { foreach (strin

java新特性之可变参数

public class NewDemo01 {     public static void main(String[] args) {         System.out.print("No args(fun()):");         fun();         System.out.print("\n one args(fun()):");         fun(1);         System.out.print("\n five a

Java一个方法使用可变参数技巧

很久没有写日志了,最近由于项目紧张在研究一些Java的反射机制,想利用该机制更好的完善和封装项目还有代码,今天在研究反射时,沈阳斌子遇到一个问题就是封装一个方法时有可变参数的问题,经上网查找找到如下方式和技巧. 编写Java程序时,经常会遇到一个方法需要多个参数的情况.例如一个求和方法: public int add(int[] list){ int sum = 0; for (int i=0;i<list.length;i++) sum += list[i]; return sum; } 重载

oracle入门(8)——实战:支持可变参数、多种条件、多个参数排序、分页的存储过程查询组件

[本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情况下才更快. 经非专业的测试,在有分页的情况下,在300万条数据里面查询的时间保持在0.1秒内.相同查询条件+分页的情况下,hibernate 用时0.3秒内. 不分页的条件下,查出来的数据越多,时间越长,时间长的话,跟hibernate相相比就没什么优势了. [思路] 我的思路是从java传来”字

通过Java发射机制调用可变参数函数

1.获取可变参数的函数 获取可变参数的函数与获取参数类型为数组类型一样. clazz.getMethod("test", Object[].class); 其中Object为可变参数或者数组的数据类型 例如: public void test(String ... params){ ... } 则获取该可变参数的函数如下: Class clazz = Class.forName("com.demo003.MainThread"); Method method = c

java map接口,可变参数,Collections集合工具类

map接口的实现类存储成对的值,键--值.通过键来找到对应的值. Collection中的集合称为单列集合,Map中的集合称为双列集合 Map中常用的集合为HashMap集合.LinkedHashMap集合. HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复,需要重写键的hashCode()方法.equals()方法. LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈

java课堂练习之可变參数与卫条件

/* 有人邀请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也决定不去. 那么最后到底有哪几个人參加了会议呢? */ 可变參数必须位于最后一项. 当可变參数个数多于一个时.必将有一个不是最后一项.所以仅仅支持有一个可变參数.