Java期中测试6-2 数群

请设计如下相关接口和类:
1) 接口IntegerGroup表示以某种方式定义的一组整数,称为数群,它可以为空,也可以包含一到多个整数。该接口包含唯一的函数boolean contains(int),返回某个整数参数是否在这个IntegerGroup对象里。如group1是IntegerGroup类型的一个对象,包含两个数字-5和3,那么group1.contains(-5)返回true,group1.contains(2)返回false。请定义接口IntegerGroup
2) 类Range是IntegerGroup的实现类,表示包含在最小值和最大值之间的所有连续整数(最小和最大值包含在内)。例如new Range(-3, 2)表示数群-3,-2,-1,0,1,2。请写出完整的Range类,包括必要的成员数据、构造函数、成员函数。假定最小值小于等于最大值。
3) 类Enum也是IntegerGroup的实现类,表示多个分散整数构成的数群。例如new Enum(new int[]{1,3,5,2,-1})表示构造一个包含整数1,3,5, 2,-1的Enum对象,以整数数组作为参数。请完成类Enum,包含必要的成员数据、构造函数、成员函数。
4) 类MultipleGroups表示一组IntegerGroup对象,并用一个列表来存储多个IntegerGroup对象,MultipleGroups类有函数add,用于添加IntegerGroup对象,有函数contains,该函数以一个整数作为参数,当且仅当该IntegerGroup对象中的一个或者多个IntegerGroup对象包含这个整数时返回true。例如MultipleGroups对象multiple1包含三个对象 new Range(5, 8), new Range(10, 12), new Enum(new int[]{1, 6}),那么对multiple1.contains的调用应当返回的值如下表所示,请完成类MultipleGroup,包含必要的成员数据、构造函数、成员函数。
Java期中测试6-2 数群
Main函数已经提供,其中构造了一个MultipleGroup对象,然后读入整数n,表示构造的IntegerGroup对象的个数,接着每行表示一个IntegerGroup对象,第一个整数表示对象类型,1为Range对象,2为Enum对象。对于Range对象来说,读入最小值和最大值,对于Enum对象来说,读入包含整数的个数,然后读入各个整数并构造为一个数组传入Enum的构造函数中。最后跟着5个测试数据,调用多个MultipleGroup对象的contains方法进行测试并输出结果。

裁判测试程序样例:

/* 请在这里填写答案 */
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        MultipleGroups mg = new MultipleGroups();
        for (int i=0;i<n;i++) {
            int t = sc.nextInt();
            IntegerGroup ng = null;
            if (t==1) {//Range
                ng = new Range(sc.nextInt(), sc.nextInt());
            } else {//Enum
                int len = sc.nextInt();
                int arr[] = new int[len];
                for (int j=0;j<len;j++)
                    arr[j] = sc.nextInt();
                    ng = new Enum(arr);
            }
            mg.add(ng);
        }
        for (int i=0;i<5;i++)
           System.out.println(mg.contains(sc.nextInt()));
        }
}

输入样例:
3
1 5 8
1 10 12
2 2 1 6
2 9 6 3 4
输出样例:
false
false
true
false
false

import java.util.Scanner;

interface Integer{
 public boolean contains(int a);
}

abstract class IntegerGroup implements Integer {
 public boolean contains(int a) {
  return true;
 }
}

class Range extends IntegerGroup {
 private int[] num;
 
 public Range(int min,int max) {
  num=new int[max-min];
  int t=min;
  for(int i=0;i<max-min;i++) {
   num[i]=t;
   t++;
  }
 }
 
 public boolean contains(int a) {
  for(int i=0;i<num.length;i++)
  {
   if(num[i]==a)
    return true;
  }
  return false;
 }
}

class Enum extends IntegerGroup {
 private int[] num;
 
 public Enum(int[] a) {
  num=new int[a.length];
  System.arraycopy(a, 0, num, 0, a.length);
  }
  
 public boolean contains(int a) {
  for(int i=0;i<num.length;i++)
  {
   if(num[i]==a)
    return true;
  }
  return false;
 }
}

class MultipleGroups{
 IntegerGroup[] group=new IntegerGroup[100000];
 int n=0;
 
 public void add(IntegerGroup temp)
 {
  group[n]=temp;
  n++;
 }
 
 public boolean contains(int a) {
  for(int i=0;i<n;i++){
   if(group[i].contains(a)==true)
    return true;
  }
  return false;
 }
}
上一篇:indexOf()与contains()的区别


下一篇:220. Contains Duplicate III(核心:set数组有序/桶排序)