0

私は Java のすべての動作に精通しているわけではないので、明らかな間違いを犯していたら申し訳ありません。基本的に、アイテムのリストと範囲を指定して、すべてのアイテムを含めるために使用できるパーセンテージを計算するプログラムを作成しています。たとえば、果物のバスケットがあり、リンゴ、ナシ、桃を 20% 未満のアイテムと 60% を超えるアイテムがない状態で入れたい場合、プログラムが教えてくれます。

そのために、下限(最小パーセンテージ)と上限(最大パーセンテージ)を持つリストがあります。私の問題は、リストを手動で作成するとうまくいくように見えることです(上記の例を使用すると、3つのアイテム、20〜60の範囲で41のアイテムが得られます)が、使用するArrays.fillと882の結果が得られます(0を含み、含まないため、これは間違っています)下限を尊重します)。

問題が何であるかわかりません..調べてArrays.fillみたところ、私が望むことをしているようです。また、両方のケース(手動とArrays.fill)でリストにアイテムをリストしましたが、どちらも同じように見えます。

違いは次のとおりです(作業バージョン):

static final String[] names = new String[] {"apples", "pears", "peach" }; //test
static final int[] low_bound = new int[] {20,20, 20}; //this allows us to invididually set the range of each item
static final int[] high_bound = new int[] {60,60, 20};

動作しないバージョン:

static final String[] names = new String[] {"apples", "pears", "peach" }; 
static int[] low_bound = new int[names.length];
static int[] high_bound = new int[names.length];
//then in the main method
Arrays.fill(low_bound, 20); //fills the min list with default value
Arrays.fill(high_bound, 60); //fills the max list with default value

結果が異なるのはなぜですか?これらは、動作中のバージョンと壊れたバージョンの間の唯一の変更です。大きなリストを使用したいのですが、データを手動で入力したくありません (ただし、必要に応じて個々の範囲を作成できる柔軟性が気に入っています)。

4

2 に答える 2

4

リンゴとオレンジを比較しています。静的テストでは、high_bound値は です{60, 60, 20}が、 を使用するArrays.fill()と {60, 60, 60} に設定されます。

于 2012-05-25T18:16:14.343 に答える
1

Array.fill コードは次のとおりであるため、意味がありません。

    public static void fill(long[] a, long val) {
        for (int i = 0, len = a.length; i < len; i++)
            a[i] = val;
    }

結果の配列は、静的初期化とまったく同じように見えます。

また、両方の初期化でコードを実行したところ、同じ結果が得られました:「結果の合計サイズは 882 です」

于 2012-05-25T18:15:30.187 に答える