编写表示区间和区间列表的Java类的算法
对于以下问题,这是一个相对较好的解决方案:
Considering that CInterval can implement any interval: (a,b), and CIntervalList implements a reunion of distinct intervals, it is required to write an IntervalList method that intersects two intervals.
如果有更好的方法来设计这两个类,你能提供一些建议吗?
如果需要工会怎么办?区间的并集并不总是区间,因此如何更改方法的返回类型?
如果您对设计类有更好的建议,那么至少给出方法签名(如果不是整个正文的话)会有所帮助。非常感谢。
另外,你认为为什么需要CIntervalList?我本可以在CInterval本身中使用一个名为intersect的方法,使用如下方法:
CInterval intersection(CInterval x)
可以这样调用Interval3 = Interval1.intersection(Interval2)
class CInterval
{
int a;
int b;
boolean vd = false; //(void intervals are marked with vd = true)
}
class CIntervalList
{
CInterval intersection(CInterval x, CInterval y)
{
CInterval z = new CInterval();
if(x.vd == false || y.vd = false)
{
z.vd= true;
return z;
}
else if(x.a < y.a)
{
if(x.b < y.a)
{
z.vd= true;
return z;
} else
{
if(x.b < y.b)
{
z.a = y.a;
z.b = x.b;
return z;
}
else
{
z.a = y.a;
z.b = y.b;
return z;
}
}
} else if(x.a > y.a)
{
if(y.b < x.a)
{
z.vd= true;
return z;
} else
{
if(y.b < x.b)
{
z.a = x.a;
z.b = y.b;
return z;
}
else
{
z.a = x.a;
z.b = x.b;
return z;
}
}
}
}
}
# 1 楼答案
一大堆话
CInterval intersection(CInterval x, CInterval y)
应该是静态的,这就是为什么它在CIntervalList
中像Files
在Java中或Collections
,Paths
李>CInterval
的参数创建构造函数public CInterval(int a,int b, boolean vd)
Math.min
和Math.max
吗李>vd
时z.vd = ...
,您没有考虑封装oo主体。尝试为你的类设置getter和setterCInterval
李>if(x.vd == true || y.vd = true)
} else if(x.a > y.a)
只要}else
就足够了李>PS:但我认为你的问题更适合https://codereview.stackexchange.com/
# 2 楼答案
相交函数可以简单得多,如下所示:
不过,您的解决方案可能会更好地优化速度。在一个紧密循环的情况下,这么详细可能是值得的,但总的来说,可读性&;优先考虑可维护性