请设计如下相关接口和类:
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,包含必要的成员数据、构造函数、成员函数。
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;
}
}