Java之趣味编程结婚问题

问题如下:
判断结婚的组合对数数。
定义: 好三位新郎为 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
不努力,还要青春干什么?
原文地址:https://www.cnblogs.com/caidupingblogs/p/5360518.html