我有一个范围 [min-max] 。 min 和 max 的类型为double
。我想把这个间隔分成n个相等的间隔。(n是一个整数)。我怎样才能在Java中实现这一目标?
例如:
说我有一个范围[10-50]
。和n=4
。
输出应该是[10-20] [20-30][30-40] [40-50]
答案 0 :(得分:2)
所以你需要的是一个较小范围限制的公式。首先让我们从计算每个小范围的长度开始:
// let range be [start, end]
// let the number of smaller ranges be n
double total_length = end - start;
double subrange_length = total_length/n;
之后,对于较小范围执行一个简单的循环,将当前范围的左端移动到每个步骤上面计算的值:
double current_start = start;
for (int i = 0; i < n; ++i) {
System.out.printl("Smaller range: [" + current_start + ", " + (current_start + subrange_length) + "]");
current_start += subrange_length;
}
答案 1 :(得分:1)
你可以做的是使用@Achintya使用的内容,double dist = (double)(max-min)/n;
然后从分钟开始,为它添加dist,这是你第一个间隔的最大值。
所以它是这样的:
[min, min + dist], [min + dist, min + 2*dist]...
直到min + n*dist >= max.
int counter = 0;
while(true) {
CreateInterval(min + counter*dist, min + (counter+1)*dist);
if (min+(counter+1)*dist >= max) {
//if we have reached the max, we are done
break;
}
}
答案 2 :(得分:0)
如果以具有两个元素(最小和最大)的数组的形式给出范围
double[] range = new double[] {min, max};
int n = 4;
你可以这样试试。你从divideRange
获得的是一个二维数组,其中包含给定范围的子范围,每个数组都有所需的长度。
public double[][] divideRange(double[] range, n) {
double[][] ranges = new double[n][2];
double length = (range[1] - range[0])/n;
ranges[0][0] = range[0];
ranges[0][1] = range[0]+length;
for(int i = 1; i < n; i++) {
ranges[i][0] = ranges[i-1][1];
ranges[i][1] = ranges[i-1][1]+length;
}
return ranges;
}