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

可变参数:适用于参数个数不确定,类型确定的情况,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
时间: 2025-01-05 17:21:39

java之 ------ 可变参数和卫条件的相关文章

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

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

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

[问题记录]Java关于可变参数重载问题

突然发现java的可变参数重载是存在歧义的,只是不知道java内部是怎么处理的,特意做如下实验: 测试代码如下: 1 /** 2 * Created by ieayoio on 16-3-1. 3 */ 4 public class VarTest { 5 6 public static void aaa(int ...a){ 7 System.out.println("可变参数重载"); 8 } 9 10 public static void aaa(int a){ 11 Syste

五分钟学Java:可变参数究竟是怎么一回事?

在逛 programcreek 的时候,我发现了一些专注基础但不容忽视的主题.比如说:Java 的可变参数究竟是怎么一回事?像这类灵魂拷问的主题,非常值得深入地研究一下. 我以前很不重视基础,觉得不就那么回事嘛,会用就行了.就比如说今天这个主题,管它可变不可变呢,不就是个参数嘛,还能有多大学问--抱着这种态度,我一直横行江湖近十载(苦笑).可等到读者找我提一些基础的问题时,我几乎回答不上来,感觉知识是散的,或者是浮于表面的.幸好最近一段时间,我开始幡然醒悟,开始不放过任何一个细节,渐渐地,有点"

Java之可变参数

Java中支持可变参数 意思就是:参数的个数可以根据需要写,你可以写1个.2个.3个....他们都被保存到一个参数的数组中. 但是这些参有一些约束:他们必须是同类型的,比如都是String字符串类型. 同时,可变参数的函数中的参数的写法也有约束:比如,可变参数的数组必须写在参数的最后,否则程序不知道你的参数到底有多少个. 例子:输出可变参数中的参数值 public class VariableArgument {    public static void main(String[] args)

c#中和java中可变参数对比

c#中可变参数用关键字params Code public class App { static void Main() { //常规使用方法 Console.WriteLine( Add( new Int32[] { 1, 2, 3, 4, 5 } ) ); //另一种调用方法 Console.WriteLine( Add( 1, 2, 3, 4, 5 ) ); //当然,参数数目是可变的,但其类型是被约束的 Console.WriteLine( Add( 1, 2, 3, 4, 5, 6,

18、Java中可变参数

从JDK 1.5之后,Java允许定义形参可变的参数 例如: public void test(int a,String ... books){ for(String book:books){ System.out.println(book) } } 调用: test(1,"JAVA疯狂讲义","零基础javascript"); 这里的books就是一个可变参数,可以当做一个数组使用 注意: 1:可变参数必须是最后一个参数 2:一个方法中最多只能定义一个可变参数 和

巩固java(六)----java中可变参数方法(非常实用哦)

java提供了可变参数的方法,即方法的参数个数可以不确定,用"..."定义. import java.util.ArrayList; import java.util.List; public class VariableParameter { //求若干个整型数中的最大值 public int getMax(int... items){ //定义可变参数items int max = Integer.MIN_VALUE; //次数为int能表示的最小值,值为-2147483648 f

Java基础-可变参数

大家都知道main方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型.我试了试,并调用了一些弹出来的方法. public class ClassC2 { public static void main(String...args) { System.out.println(args.getClass()); //Exception in thread "main" class [Ljava.lang.String; System.out.println("===