黑马程序员技术交流社区

标题: 输入两个集合,求出的交集和全集,并判断是否是子集关系 [打印本页]

作者: 15820030540    时间: 2016-7-4 01:03
标题: 输入两个集合,求出的交集和全集,并判断是否是子集关系
这是之前写的代码,之后也没进行修改过,如有更简单的方法大家可以去试试,可给高中的弟弟妹妹们用作集合检测!
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Scanner;

public class Demo_Math {
        public static void main(String[] args) {
                System.out.println("这是判断两个集合之间的关系软件!");
                Scanner sc = new Scanner(System.in);//键盘录入
                System.out.println("请输入第一个集合,中间用空格隔开:");
                String str1 = sc.nextLine();
                System.out.println("请输入第二个集合,中间用空格隔开:");
                String str2 = sc.nextLine();
                demo1(str1,str2);                                        //调用方法实现目的
        }
        //计算子集,交集,全集的主要方法实现细节(还可以实现补集  略)
        private static void demo1(String str1,String str2) {
                Collection c1 = new ArrayList();//创建两个集合作为比较
                Collection c2 = new ArrayList();
                String s1[] = str1.split(" ");        //用" "把输入的字符串分割成字符串数组
                String s2[] = str2.split(" ");
                if(!anInt(s1)){
                        System.out.println("第一个集合中存在非法元素!请重新正确输入");
                }else if(!anInt(s2)){
                        System.out.println("第二个集合中存在非法元素!请重新正确输入");
                }else{
                        reArr(s1,c1);                                        //把字符串数组加入到定义的集合中
                        reArr(s2,c2);
                        if(c1.equals(c2)){
                                System.out.println("这两个数互为子集!");
                        }else if(c2.containsAll(c1)){
                                System.out.println("第1个数是第2个数的子集!");
                        }else if(c1.containsAll(c2)){
                                System.out.println("第2个数是第1个数的子集!");
                        } else{
                                System.out.println("这两个数不是子集关系!");
                        }
                        Collection c3 = new ArrayList(c1);//作为第三方的参数集合
                        c1.removeAll(c2);
                        c1.addAll(c2);
                        int n[] = String_Int(c1);        //用int类型数组n接收返回的数组
                        Arrays.sort(n);                                //排序int类型的数组n
                        System.out.println("全集为:"+Arrays.toString(n));
                        c1.removeAll(c3);
                        c2.removeAll(c1);
                        System.out.println("交集为:"+c2);
                }
        }
        //判断字符串数组是否可以转成int类型数据
        private static boolean anInt(String s[]){
                for(int j=0;j<s.length;j++){
                        char c[] = s[j].toCharArray();
                        for (int i = 0; i < c.length; i++) {
                                if(c[i]>='0'&&c[i]<='9'){
                                       
                                }else{
                                        return false;
                                }
                        }
                }
                return true;
        }
        //判断字符串是否可以转成int类型数据
                private static boolean anInt(String s){               
                        char c[] = s.toCharArray();
                        for (int i = 0; i < c.length; i++) {
                                if(c[i]>='0'&&c[i]<='9'){
                                       
                                }else{
                                        return false;
                                }
                        }
                        return true;
                }
               
               
        //把集合c转换成int类型数组返回
        private static int[] String_Int(Collection c) {
                String st1 = c.toString();
                String st2 = st1.substring(1, st1.length()-1);
                String st3[] = st2.split(", ");
                int n[] = new int[st3.length];
                for(int i=0;i<n.length;i++){
                        n[i] = Integer.parseInt(st3[i]);               
                }
                return n;
        }
        //把String类型的数组每个元素加入集合c中
        private static void reArr(String s[],Collection c){
                for(int i=0;i<s.length;i++){
                        c.add(s[i]);
                }
        }
}


作者: shuiwa    时间: 2016-7-4 02:13
高中的弟弟妹妹们看到这样的题都不用输入




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2