Java 两个数字对的重叠范围
有没有简单的方法来定义两个数字对的重叠范围? 例如, Pair1=[360780] Pair2=[420800]Java 两个数字对的重叠范围,java,list,Java,List,有没有简单的方法来定义两个数字对的重叠范围? 例如, Pair1=[360780] Pair2=[420800] 答案是[420780]确保间隔重叠 然后取两对的下界的最大值和上界的最小值 int lower = Math.max(myPair1.x1, myPair2.x1); int upper = Math.min(myPair1.x2, myPair2.x2); if(lower < upper) return new Pair(lower, upper) else t
答案是[420780]确保间隔重叠 然后取两对的下界的最大值和上界的最小值
int lower = Math.max(myPair1.x1, myPair2.x1);
int upper = Math.min(myPair1.x2, myPair2.x2);
if(lower < upper)
return new Pair(lower, upper)
else
throw new CustomException("Intervals not overlap")
int lower=Math.max(myPair1.x1,myPair2.x1);
int upper=Math.min(myPair1.x2,myPair2.x2);
if(下部<上部)
返回新对(下部、上部)
其他的
抛出新的CustomException(“间隔不重叠”)
确保间隔重叠
然后取两对的下界的最大值和上界的最小值
int lower = Math.max(myPair1.x1, myPair2.x1);
int upper = Math.min(myPair1.x2, myPair2.x2);
if(lower < upper)
return new Pair(lower, upper)
else
throw new CustomException("Intervals not overlap")
int lower=Math.max(myPair1.x1,myPair2.x1);
int upper=Math.min(myPair1.x2,myPair2.x2);
if(下部<上部)
返回新对(下部、上部)
其他的
抛出新的CustomException(“间隔不重叠”)
这个怎么样:
int from = Math.max(pair1.getX(), pair2.getX());
int to = Math.min(pair1.getY(), pair2.getY());
if (from <= to) {
return new Pair(from, to);
} else {
return null;
}
intfrom=Math.max(pair1.getX(),pair2.getX());
int to=Math.min(pair1.getY(),pair2.getY());
如果(从开始)这个怎么样:
int from = Math.max(pair1.getX(), pair2.getX());
int to = Math.min(pair1.getY(), pair2.getY());
if (from <= to) {
return new Pair(from, to);
} else {
return null;
}
intfrom=Math.max(pair1.getX(),pair2.getX());
int to=Math.min(pair1.getY(),pair2.getY());
如果(从我会创建一个
class Range {
final int start;
final int end;
private Range(int start; int end) { this.start = start; this.end = end; }
public static Range of(int start, int end) { return new Range(start, end); }
public Range and(Range r) {
return new Range(Math.max(start, r.start), Math.min(end, r.end);
}
}
你可以写
Range one = Range.of(360, 780);
Range two = Range.of(420, 800);
Range both = one.and(two);
我会创建一个类似
class Range {
final int start;
final int end;
private Range(int start; int end) { this.start = start; this.end = end; }
public static Range of(int start, int end) { return new Range(start, end); }
public Range and(Range r) {
return new Range(Math.max(start, r.start), Math.min(end, r.end);
}
}
你可以写
Range one = Range.of(360, 780);
Range two = Range.of(420, 800);
Range both = one.and(two);
有些误用了java.awt.geom
,请尝试:
public static double[] createIntersection(double[] a1, double[] a2) {
Rectangle2D r1 = new Rectangle2D.Double(), r2 = new Rectangle2D.Double();
r1.setFrameFromDiagonal(a1[0], 0, a1[1], 1);
r2.setFrameFromDiagonal(a2[0], 0, a2[1], 1);
Rectangle2D r3 = r1.createIntersection(r2);
return new double[] { r3.getMinX(), r3.getMaxX() };
}
有些误用了java.awt.geom
,请尝试:
public static double[] createIntersection(double[] a1, double[] a2) {
Rectangle2D r1 = new Rectangle2D.Double(), r2 = new Rectangle2D.Double();
r1.setFrameFromDiagonal(a1[0], 0, a1[1], 1);
r2.setFrameFromDiagonal(a2[0], 0, a2[1], 1);
Rectangle2D r3 = r1.createIntersection(r2);
return new double[] { r3.getMinX(), r3.getMaxX() };
}
result={max(pair1[0],pair2[0])、min(pair1[1],pair2[1])}
检查第一个示例result={max(pair1[0],pair2[0])、min(pair1[1],pair2[1])
检查第一个示例是否有快速方法检查间隔是否重叠?您必须检查新间隔的下限是否低于新间隔的上限是否有快速方法检查间隔是否重叠?您必须检查新间隔的下限是否低于t新间隔的上限不应该是from,不应该是from,如果没有重叠怎么办?@whoAmI在这种情况下end
start
会得到一个无效的范围。如何处理它取决于您希望它做什么。它可能会在构造函数中引发异常。如果没有verlapping?@whoAmI在这种情况下,end
start
会得到一个无效的范围。如何处理这个范围取决于您希望它做什么。它可能会在构造函数中引发异常。对于这样一个简单的任务来说,似乎是过度消耗。对于这样一个简单的任务来说,似乎是过度消耗。