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

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

可变參数的书写形式如:

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

... 位于变量类型和变量名之间。前后有无空格都能够;

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

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

  1. /*
  2. 有人邀请A,B,C,D,E,F 6个人參加一项会议,这6个人有些奇怪。由于他们有非常多要求。已知:
  3. 1)A,B两人至少有1人參加会议;
  4. 2)A,E,F 3人中有2人參加会议;
  5. 3)B和C两人一致决定。要么两人都去。要么两人都不去;
  6. 4)A,D两人中仅仅1人參加会议。
  7. 5)C,D两人中也仅仅要1人參加会议。
  8. 6)假设D不去。那么E也决定不去。
  9. 那么最后到底有哪几个人參加了会议呢?
  10. */
  11. public class Meeting {
  12.  
  13. public static void main(String[] args) {
  14. int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
  15. /*for (int a1 = 1; a1 <= 2; a1++) {
  16. for (int a2 = 1; a2 <= 2; a2++) {
  17. for (int a3 = 1; a3 <= 2; a3++) {
  18. for (int a4 = 1; a4 <= 2; a4++) {
  19. for (int a5 = 1; a5 <= 2; a5++) {
  20. for (int a6 = 1; a6 <= 2; a6++) {
  21. */
  22. //相似上面6个for
  23. for (int i = 0; i <= 63; i++) {//二进制表示六个人( 000000 ~ 111111 )去还是不去 1表示去 ,0表示不去
  24. a = ((i & 1) == 0) ? 0 : 1;
  25. b = ((i & 2) == 0) ? 0 : 1;
  26. c = ((i & 4) == 0) ?
  27.  
  28. 0 : 1;
  29. d = ((i & 8) == 0) ? 0 : 1;
  30. e = ((i & 16) == 0) ? 0 : 1;
  31. f = ((i & 32) == 0) ? 0 : 1;
  32. if (fun(a, b, c, d, e, f)) {
  33. System.out.println("a= " + a + " b= " + b + " c= " + c + " d= "
  34. + d + " e= " + e + " f= " + f);
  35. }
  36. }
  37. }
  38.  
  39. //统计去的人数
  40. private static int countGo(int... args) {//可变參数
  41. int sum = 0;
  42. for (int a : args) {
  43. if (a == 1) {//1表示去 0表示不去
  44. sum++;
  45. }
  46. }
  47. return sum;
  48. }
  49.  
  50. //判读是否符合条件
  51. private static boolean fun(int a, int b, int c, int d, int e, int f) {
  52. // 卫条件,每一个卫条件好象一个卫兵一样,专门拦截该条件的非法结果数据。经过全部卫兵。剩下的数据就是合法的
  53. if (!(countGo(a, b) >= 1)) {
  54. return false;
  55. }
  56. if (!(countGo(a, e, f) == 2)) {
  57. return false;
  58. }
  59. if (!(countGo(b, c) == 0 || countGo(b, c) == 2)) {
  60. return false;
  61. }
  62. if (!(countGo(a, d) == 1)) {
  63. return false;
  64. }
  65. if (!(countGo(c, d) == 1)) {
  66. return false;
  67. }
  68. if (countGo(d) == 0 && countGo(e) == 1) {
  69. return false;
  70. }
  71.  
  72. return true;
  73. }
  74.  
  75. }
  76. //结果: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. 判断Json字符串返回类型 对象 或者 数组

    public enum JSON_TYPE { /** * JSONObject */ JSON_TYPE_OBJECT, /** * JSONArray */ JSON_TYPE_ARRAY, /* ...

  2. Java Servlet生成JSON格式数据并用jQuery显示

    1.Servlet通过json-lib生成JSON格式的数据 import java.io.IOException;import java.io.PrintWriter;import java.uti ...

  3. WinForm窗体继承

    在Windows应用程序中,从现有的窗体继承,查看子窗体的设计视图时,会出现错误: 服务容器中已存在服务 System.Windows.Forms.Design.IEventHandlerServic ...

  4. QSocket类

    QSocket类提供了一个有缓冲的TCP连接. 详情请见…… #include <qsocket.h> 继承了QObject和QIODevice. 所有成员函数的列表. 公有成员 enum ...

  5. Encapsulating Data 数据封装

    Objective-C中类的封装本质上其他OO语言没什么区别,不过在概念和书写表达上差异还是比较大的, Property属性 这里的Property并不是简单的类成员变量,而是OC中特有的可以为编译器 ...

  6. 关于Unity中水和雾的使用

    水 自己来做水和雾还是有点麻烦的,不过没关系,Unity帮我们做好了很多可以用的. 1.Unity自己实现了水的特效,帮助我们解决游戏中水的问题 2.Unity的水集成在了Environment的环境 ...

  7. Linux中的绝对路径和相对路径

    一.介绍 1,文件路径 什么是文件的路径? 答:这个文件存放的地方,可以联想为 文件的“家”. 在Linux中,存在着绝对路径和相对路径 绝对路径:路径的写法一定是由根目录 / 写起的,例如 /usr ...

  8. 详细的Log4j使用教程

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...

  9. 嵌入式开发之zynq驱动—— zynq ps pl ddr 内存地址空间映射

    http://www.wiki.xilinx.com/Zynq-7000+AP+SoC+-+32+Bit+DDR+Access+with+ECC+Tech+Tip http://patchwork.o ...

  10. 模式识别之检索---Bag of visual word(词袋模型)

    visual words 视觉单词 http://blog.csdn.net/v_july_v/article/details/8203674 http://blog.csdn.net/pi9nc/a ...