当前位置: 代码迷 >> Java相关 >> 求解集合问题
  详细解决方案

求解集合问题

热度:363   发布时间:2011-05-05 22:54:41.0
求解集合问题
import java.util.Scanner;
public class Jihe {
double array[]=new double[100];//成员变量  //int array[]
Jihe(double a,double b,double c,double d,double e){
     array[0]=a;
     array[1]=b;
     array[2]=c;
     array[3]=d;
     array[4]=e;
}

Jihe(){

}

public  Jihe jiao(Jihe b) { //成员方法
     Jihe c=new Jihe();
     int k=0;
     for (int i=0;array[i]!=0;i++){  //遍历集合    //lab1在这一行
     lab1: for (int j=0;b.array[j]!=0;j++){  //遍历集合b
              if(array[i]==b.array[j]){
                int m=0;
                for (;m<k;m++) //遍历集合c,k是当前集合c的长度即最后一个下标的下一个值
                {
                    if(array[i]==c.array[m])
                        break;
                }
                if(m==k){
                   c.array[k]=array[i];
                   k++;
                }

                break lab1;
            }
          }
     }
     return c;
}

public  Jihe bing(Jihe b) { //成员方法
     Jihe c=new Jihe();
     int k=0;

     for (int i=0;i<5;i++)//遍历集合a
{
         int m=0;
         for(;m<k;m++)
         {
             if(c.array[m]==array[i])
                 break;
         }
         if(m==k)
         {
    c.array[k]=array[i];
        k++;
     }
     }
      for (int j=0;j<5;j++)//lab2: for (int j=0;j<b.array.length;j++)
          {  //遍历集合b
             int m=0;
             for (;m<k;m++) //遍历集合c,k是当前集合c的长度即最后一个下标的下一个值
             {
                 if(b.array[j]==c.array[m])
                        break ;//break lab2;
             }
             if(m==k){
                   c.array[k]=b.array[j];
                   k++;
                }
            }
     return c;
}

public  Jihe bu(Jihe b) { //成员方法
      Jihe c=new Jihe();
      int k=0;
      lab3:    for (int i=0;array[i]!=0;i++){  //遍历集合
               int j=0;
               for (;b.array[j]!=0;j++){  //遍历集合b
                    if(array[i]==b.array[j])
                      continue lab3;//原集合中的元素在b集合中找到相同的则转向下一个元素
               }
               if(b.array[j]==0)//原集合中的元素在b集合中没找到相同则该元素存入集合c
               {
                   int m=0;
                   for (;m<k;m++) //遍历集合c,k是当前集合c的长度
                    {
                       if(array[i]==c.array[m])
                            continue lab3;//原集合中的元素在c集合中找到相同的则转向下一个元素
                    }
                    if(m==k){
                       c.array[k]=array[i];
                       k++;
                    }
                 }
              }
         return c;
    }

public  Jihe cha(Jihe b) { //成员方法
      Jihe c=new Jihe();
      int k=0;
      lab3:    for (int i=0;array[i]!=0;i++){  //遍历集合
               int j=0;
               for (;b.array[j]!=0;j++){  //遍历集合b
                if(array[i]==b.array[j])
                    continue lab3;//原集合中的元素在b集合中找到相同的则转向下一个元素
               }
               if(j==5)//原集合中的元素在b集合中没找到相同则该元素存入集合c
               {
                   int m=0;
                   for (;m<k;m++) //遍历集合c,k是当前集合c的长度
                    {   if(array[i]==c.array[m])
                            continue lab3;//原集合中的元素在c集合中找到相同的则转向下一个元素
                    }
                    if(m==k){
                       c.array[k]=array[i];
                       k++;
                    }
                }
              }
         return c;
    }

public void print(){
     if(array[0]==0)
         System.out.print("运算后的集合是个空集!请重新选择集合。");
     else{
         System.out.print("{");
         for(int i=0;array[i]!=0;i++)
            System.out.print(array[i]+" ");
         System.out.print("}");
     }

}

public static void main(String[] args) { //主方法
     Jihe a=new Jihe(1,2,3,4,5);
     Jihe b=new Jihe(1,2,8,9,6);//定义对象
     Jihe c=new Jihe();
     Scanner d=new Scanner(System.in);
     System.out.println("请选择元素类型,输入“1”选择双精度型,输入“2”选择整型,输入“3”选择字符型:" );
     int kind=d.nextInt();
     switch(kind){
     case 1:
         break;
     case 2:
         a=new IntJihe(1,2,3,4,5);
         b=new IntJihe(1,2,6,9,8);
         c=new IntJihe();
         break;
     case 3:
         a=new CharJihe('a','b','c','d','e');
         b=new CharJihe('a','b','c','f','g');
         c=new CharJihe();
        
         
     }
   
    System.out.println("请选择要进行的操作,输入“1”选择交运算,输入“2”选择并运算,输入“3”选择补运算,输入“4”选择差运算:" );

     
      int option=d.nextInt();
    switch(option){
        case 1:
            System.out.println("您选择的是交运算");

            a.print();
            System.out.print("∩");
            b.print();
            System.out.println();
            c=a.jiao(b);

            break;
        case 2:
            System.out.println("您选择的是并运算");
            a.print();
            System.out.print("∪");
            b.print();
            System.out.println();
            c=a.bing(b);
            break;
        case 3:
            System.out.println("您选择的是补运算");
            a.print();
            System.out.print("补");
            b.print();
            System.out.println();
            c=a.bu(b);
            break;
        case 4:
            System.out.println("您选择的是差运算");
            a.print();
            System.out.print("-");
            b.print();
            System.out.println();
            c=a.cha(b);
            break;

    }
    System.out.println("运算后的集合为:");
    c.print();//c是Jihe型(由调用方法返回),所以调用的是主类里的print方法

    }

}


class IntJihe extends Jihe {
    IntJihe(int a,int b,int c,int d,int e){
         array[0]=a;
         array[1]=b;
         array[2]=c;
         array[3]=d;
         array[4]=e;
    }
    IntJihe(){

    }
    public void print(){
         if(array[0]==0)
             System.out.print("运算后的集合是个空集!请重新选择元素。");
         else{
             int yuansu;
             System.out.print("{");
             for(int i=0;array[i]!=0;i++)
             {
                 yuansu=(int)array[i];
                 System.out.print(yuansu+" ");
             }
             System.out.print("}");
            
         }

     }
}



class CharJihe extends Jihe {
   
    CharJihe(char a,char b,char c,char d,char e){
             array[0]=a;
             array[1]=b;
             array[2]=c;
             array[3]=d;
             array[4]=e;
        }
    CharJihe(){

        }
        public void print(){
             if(array[0]==0)
                 System.out.print("运算后的集合是个空集!请重新选择元素。");
             else{
                 char yuansu;
                 System.out.print("{");
                 for(int i=0;array[i]!=0;i++)
                 {
                     yuansu=(char)(array[i]);
                     System.out.print(yuansu+" ");
                 }
                 System.out.print("}");
                 
             }

         }
    }




部分运行结果:

请选择元素类型,输入“1”选择双精度型,输入“2”选择整型,输入“3”选择字符型:
2
请选择要进行的操作,输入“1”选择交运算,输入“2”选择并运算,输入“3”选择补运算,输入“4”选择差运算:
2
您选择的是并运算
{1 2 3 4 5 }∪{1 2 6 9 8 }
运算后的集合为:
{1.0 2.0 3.0 4.0 5.0 6.0 9.0 8.0 }





请选择元素类型,输入“1”选择双精度型,输入“2”选择整型,输入“3”选择字符型:
3
请选择要进行的操作,输入“1”选择交运算,输入“2”选择并运算,输入“3”选择补运算,输入“4”选择差运算:
4
您选择的是差运算
{a b c d e }-{a b c f g }
运算后的集合为:
{100.0 101.0 }


怎么才能让运算后的集合输出形式能根据前面的变一下啊
搜索更多相关的解决方案: public  double  import  

----------------解决方案--------------------------------------------------------
因为是第一次用java写这么大的程序,而且是刚学的,所以有点笨拙,前辈们别笑话哈,谢谢帮忙。
----------------解决方案--------------------------------------------------------
有内有人理我啊?
----------------解决方案--------------------------------------------------------
搞这么多程序代码,看起来有点不想看,我仔细看看
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2011-05-09 07:01:43
幸馥

等 级:新手上路
帖 子:9
专家分:2
注 册:2010-12-28
  得分:0 
回复 5楼 付政委
就是比如我选了整型集合,最后的结果也要输整型元素啊,可是不管我怎么弄,他输出的总是double型的元素。
----------------解决方案--------------------------------------------------------
回复 4楼 w123012306
谢谢哈,可是您看出什么没?
----------------解决方案--------------------------------------------------------
回复 4楼 w123012306
主要是成员变量就是double型的,然后后来建对象是先用了父类声明,再根据选择分配空间的,可是调用的方法返回的都是父类的,所以输出的时候没办法用到方法在子类的重构。
----------------解决方案--------------------------------------------------------
  相关解决方案