问题如下:
判断结婚的组合对数数。
定义: 好三位新郎为 A,B,C ;三位新娘为X,Y,Z
有人想要知道他们谁和谁结婚 ,于是问了其中的三位。
回答是这样的:A说他将和X结婚 ;X说她的未婚夫是C ;C说他将和Z结婚,
这个人听到他们在开玩笑,全部在说谎话,请编程。
package JieHun; public class JieHun { /** 这边【程序 是 详细注释 代码:】 * @param args * 判断结婚的 组合对数数 * 定义: 好三位新郎为 A,B,C ;三位新娘为X,Y,Z * 有人想要知道他们谁和谁结婚 ,于是问了其中的三位 * 回答是这样的:A说他将和X结婚 ;X说她的未婚夫是C ;C说他将和Z结婚, * 这个人听到他们在开玩笑,全部在说谎话,请编程 */ public static String nan[]={"A","B","C"}; public static String nv[]={"X","Y","Z"}; public static String shuju1,suoyou ;//程序测试 public static void main(String[] args) { String[] ZuheA=new String[2]; String[] ZuheB=new String[3]; String[] ZuheC=new String[1]; //必须 要创建数组对象 int a=0,b=0,c=0;//进入一个数据就加一个数据 ,数据必须要写在循环的外面,不然循环一次就 清零了 int ce1=0,ce2=0,ce3=0; //定义: 好三位新郎为 A,B,C; //三位新娘为X,Y,Z /** * 1.确定好有多少 种组队的 样式 AX--AY--AZ; BX--BY--BZ ; CX--CY--CZ; */ //System.out.print("长度是"+nan.length); for (int i = 0; i <nan.length; i++) {//将【新郎】遍历 String nandui=nan[i]; for (int j = 0; j <nv.length; j++) {//将【新娘】遍历 //System.out.println("最后的【i】:"+i+"和【j】:"+j);//测试 数据 String nvdui=nv[j]; String ZuHe=nandui+nvdui;//组合结婚的对数 /* 【测试程序】 suoyou +=" "+ZuHe+", "; System.out.println("这是【开始(ce1)】第:"+ce1+"输出结果:"+suoyou);//程序测试 ce1++; */ //char[] ZuheA=null,ZuheB=null,ZuheC=null;//组合对数值 就是ZuheA AX--AY--AZ 这就是数组形式 // List<String> listA = new ArrayList<String>(); // List<String> listB = new ArrayList<String>(); // List<String> listC = new ArrayList<String>(); //获取组合 数据 //A说他将和X结婚 ;【 为假 】 那么就可以让 AY--AZ ………… 进入 if(!ZuHe.equals("AX")){ //这里面不需要 在&&!ZuHe.equals("XA") 因为这里面始终以 男同志为开头 // System.out.println("我是A一号判断:"+ZuHe);//程序测试 // if(ZuHe.matches("[\w]+A")){//这里面 -采用的正则表达式 只让含 A开头的数据进入 //上面的 采用的正则表达式 这个有点问题 若是中间的 字符他说查不到的 /** 【测试程序】 * suoyou +=" "+ZuHe+", "; System.out.println("这是【A】(ce2)第:"+ce2+"输出结果:"+suoyou);//程序测试 ce2++; */ //【方法二】 if(!ZuHe.equals("AX") && ZuHe.matches(".*A.*")) 注意:这个【 可以使用】else if //【方法一】 这是为了明了 这个【不能使用 】else if if(ZuHe.matches(".*A.*")){ // 用java正则表达式检测字符串中是否含有某字符 //System.out.println("我是A二号判断:"+ZuHe);//程序测试 ZuheA[a]=ZuHe; //System.out.println("数据a:"+a);//程序测试 //ZuheA = ZuHe.toCharArray();// 这是char类型的 //ZuheA = ZuHe.toString(); //System.out.println(ZuheA); //listA.add(ZuHe); //ZuheA = listA.toArray(new String[a]); a++; } } //X说她的未婚夫是C ;也就是说:C是X的未婚夫 因为 我这里面始终 以男性 为开头。 【 为假 】 那么就是 除去CX-(XC) 都可以进入 //else if (!ZuHe.equals("CX")) { //【注意:】 这里面不能使用 else if()因为使用了 这个 就会导致 只要上面的条件满足 (也就会上面if)条件满足 他就不会在在下面 进行判断 //除非 将上面的那两重if语句 写在一起 那样这下面就可以使用 else if 【方法二】 if(!ZuHe.equals("AX") && ZuHe.matches(".*A.*")) 这样就可以 在下面使用else if if (!ZuHe.equals("CX")) { //C说他将和Z结婚 【为假】 所以 下面 的数据可以进入 /* 【测试程序】 suoyou +=" "+ZuHe+", "; System.out.println("这是【C(ce3)】第:"+ce3+"输出结果:"+suoyou);//程序测试 ce3++; */ /* if(ZuHe.equals("CY")){ System.out.println("出现了CY数据:"+ZuHe); }*/ if(!ZuHe.equals("CZ")){ //if(ZuHe.matches("[\w]+C")){//这里面 -采用的正则表达式 只让含 C开头的数据进入 if(ZuHe.matches(".*C.*")){ ZuheC[c]=ZuHe; //注意:这里面其实只又一个数据 就是CY //ZuheC = ZuHe.toCharArray();// 这是char类型的 //listC.add(ZuHe);//添加数据 //ZuheC =listA.toArray(new String[c]); //System.out.println("出现了CY数据:"+ZuHe); c++; } } } //这里面 -采用的正则表达式 只让含 B开头的数据进入 这里面是有三组数据 //if(ZuHe.matches("[\w]+B")){ //else if(ZuHe.matches(".*B.*")){ //【注意:】 这里面不能使用 else if()因为使用了 这个 就会导致 只要上面的条件满足 (也就会上面if)条件满足 他就不会在在下面 进行判断 //除非 将上面的那两重if语句 写在一起 那样这下面就可以使用 else if if(ZuHe.matches(".*B.*")){ ZuheB[b]=ZuHe; //注意:这里面其实只又一个数据 就是CY //ZuheB = ZuHe.toCharArray();// 这是char类型的 //listB.add(ZuHe); //ZuheB=listB.toArray(new String[b]); b++; } //就是将获取的数据进行组合匹配 组合匹配的数据 必须是要将 最外层的数据循环完成 在进行 也就是 i=2;j=2的时候 if(i==2 && j==2){//这样他们的数据就已经全部匹配完成了 for (int k = 0; k < ZuheA.length; k++) { String qeiA=ZuheA[k];//获取 为真的 数据 for (int l = 0; l < ZuheB.length; l++) { String qeiB=ZuheB[l]; for (int m = 0; m < ZuheC.length; m++) { String qeiC=ZuheC[m]; String QuanBu=qeiA+""+qeiB+""+qeiC;//这里面是为了判断该 数据是否 有 相同 的字符 【因为】这里面不能出现相同的数据 因为 中国法律规律 一夫一妻制 所以 结婚 组合 也是如此 每个人对应一个 String QuanBu1=" "+qeiA+","+qeiB+","+qeiC+" ";//这里是为了进行打印而做的备份数据 不做就要 在进行 将数据进行分解 或者加入 空格 System.out.println(" 第【k】"+k+" 【l】"+l+" 【m】"+m+"可以出现这么种:组合结果:"+ QuanBu); //int cfA,cfB,cfC;//不允许重复的个数 //if(QuanBu.matches("^.*?(.+?)\1.*?$")){//正则表达式 不允许这里面有着重复的数据(也就是重复的字符串) 这个正则表达式有问题 if(QuanBu.matches("(?!.*(.).*\1)")){//表示字符串中【不含】重复字符 System.out.println(" 由于不可能出现这么多种结果,也不可能出现 一对多 只能出现一对一 所以最终 结婚对数如下"); System.out.println(" 【最终结婚的组合】是:"+ QuanBu1); } } } } } } } } }
run:
第【k】0 【l】0 【m】0可以出现这么种:组合结果:AYBXCY 第【k】0 【l】1 【m】0可以出现这么种:组合结果:AYBYCY 第【k】0 【l】2 【m】0可以出现这么种:组合结果:AYBZCY 第【k】1 【l】0 【m】0可以出现这么种:组合结果:AZBXCY 第【k】1 【l】1 【m】0可以出现这么种:组合结果:AZBYCY 第【k】1 【l】2 【m】0可以出现这么种:组合结果:AZBZCY