对于下面的问题,这是不是一个比较好的解决方案:
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;
}
}
}
}
}
最佳答案
一堆评论
CInterval intersection(CInterval x, CInterval y)
应该是static 这就是为什么它像Files< 一样在
在 Java 或CIntervalList
中集合
中,路径
...- a 和 b 没那么有意义!而是使用 bornSup 和 bornInf 或者 left 和 right 或者 end 和 start。
- 为
CInterval
创建一个带有参数的构造函数 ...public CInterval(int a,int b, boolean vd)
- 您是否考虑过使用
Math.min
和Math.max
? - 当您像这样访问实例变量
vd
时z.vd = ...
您没有考虑封装 oo 主体。尝试为您的CInterval
类设置 Getters 和 Setters。 - 如果其中一个区间为 Void,在本例中将 z 区间设置为 Void,因此
if(x.vd == true || y.vd = true)
- 不需要写这个
} else if(x.a > y.a)
只需}else
就足够了。
PS :但我认为您的问题更适合 https://codereview.stackexchange.com/
关于java - 编写表示间隔和间隔列表的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30695224/