3

我有一个范围[min-max]minmax是类型double。我想把这个间隔分成n个相等的间隔。(n是一个整数)。我怎样才能在 Java 中实现这一点?

例如:说我有一个范围[10-50]。和n=4。输出应该是一个范围列表,例如[10-20] [20-30][30-40] [40-50]

4

3 回答 3

3

所以你需要的是一个较小范围限制的公式。首先让我们从计算每个小范围的长度开始:

// 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;
}
于 2013-04-19T15:52:50.487 回答
1

如果以具有两个元素(最小值和最大值)的数组的形式给出 Range

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;
}
于 2013-04-19T16:00:35.280 回答
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;
    }
}
于 2013-04-19T15:51:21.203 回答