可变參数:适用于參数个数不确定。类型确定的情况,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

java之 ------ 可变參数和卫条件的更多相关文章

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

    /*  有人邀请A,B,C,D,E,F 6个人參加一项会议,这6个人有些奇怪.由于他们有非常多要求,已知:  1)A,B两人至少有1人參加会议:  2)A,E,F 3人中有2人參加会议.  3)B和C ...

  2. java 可变參数

    我们在某些特定的需求环境下,可能要对某一个方法中的參数进行一些操作,并且这些方法中的參数是不规定的,那么问题来了,我们该怎么办呢? java事实上就为我们考虑了这样的情况,那就是使用可变參数 可变參数 ...

  3. java 可变參数列表

    Java SE5加入了可变參数列表特性 參数能够这样定义.(Object-args).可变參数用"..."来定义,args是可变參数的数组.举个样例: package sample ...

  4. OC可变參数的函数实现va_start、va_end、va_list的使用

    一.简单介绍 我们常常在编程的时候看见类似这种代码,如图1.1 图1.1 或者是这种可变參数,如图1.2 图1.2 二.基本知识介绍 在学习怎样写这样的格式的函数前,先简介几个经常使用的宏: 下面摘自 ...

  5. iOS 处理方法中的可变參数

    ## iOS 处理方法中的可变參数 近期写了一个自己定义的对话框的demo,想模仿系统的UIAlertView的实现方式.对处理可变參数的时候,遇到了小问题,于是谷歌了一下.写下了处理问题的方法.记录 ...

  6. java 变长參数使用原则

    1.java变长參数用...表示,如Print(String... args){  ... }; 2.假设一个调用既匹配一个固定參数方法.又匹配一个变长參数方法,则优先匹配固定參数的方法 3.假设一个 ...

  7. Effective JavaScript Item 21 使用apply方法调用函数以传入可变參数列表

    本系列作为Effective JavaScript的读书笔记. 以下是一个拥有可变參数列表的方法的典型样例: average(1, 2, 3); // 2 average(1); // 1 avera ...

  8. C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数

    在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中, ...

  9. 增强for循环、Map接口遍历、可变參数方法

    增强for循环 1.for循环能做得事情.增强for循环大部分都能做(假设要想获得下标的时候就必须使用简单for循环了) 2.增强for有时候可以方便的处理集合遍历的问题,可是集合的标准遍历是使用迭代 ...

随机推荐

  1. Python基础知识小结

    1. 关于函数传参 def func(n, *args, **kwargs): print n print args print kwargs if __name__ == '__main__': # ...

  2. Python Garbage Collection 与 Objective-C ARC

    转载请注明出处 http://blog.csdn.net/u014205968/article/details/69389363 Python GC 与 Objective-C ARC 提起GC(Ga ...

  3. VS2013安装MVC5

    打开VS 选择  .net 4.5 创建项目 右击项目 选择管理NuGet 输入Microsoft.AspNet.Mvc -Version 5.0.0 安装最新版本的MVC5

  4. Lucene增删改查

    IndexManager.java package com.witwicky.lucene; import java.io.File; import java.util.ArrayList; impo ...

  5. SpringMVC深度探险(四) —— SpringMVC核心配置文件详解

    在上一篇文章中,我们从DispatcherServlet谈起,最终为读者详细分析了SpringMVC的初始化主线的全部过程.整个初始化主线的研究,其实始终围绕着DispatcherServlet.We ...

  6. 链接按钮LinkButton(按钮组)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. Qt 菜鸟的坑 QAbstractSocket::isValid()

    我曾经多次在 Qt socket 编程中使用 tcpSocket.isValid 来判断我当前的连接是否可用,最近写程序时才发现此法并不妥当. bool QAbstractSocket::isVali ...

  8. Chrome驱动安装问题

    1.org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value' 原因:浏览器 ...

  9. JAVA获取系统相关信息

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003596 获取JRE系统相关参数 java 通过S ...

  10. 3D打印浪潮中的赢家与输家

    3D打印浪潮中的赢家与输家 微博 空间 微信 新浪微博 邮箱 QQ好友 人人网 开心网 [导读]虽然目前3D打印行业规模不大且比较分散,但相关上市公司数量惊人.最大的两家是Stratasys和3D S ...