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

2 つの要素 (最小値と最大値) を持つ配列の形式で範囲が指定されている場合

double[] range = new double[] {min, max};
int n = 4;

この方法で試すことができます。得divideRangeられるのは、指定された範囲のサブ範囲を持つ 2 次元配列で、それぞれが必要な長さを持ちます。

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 に答える