为什么在使用Arrays.fill与手动制作列表时会得到不同的结果?

时间:2012-05-25 18:04:43

标签: java arrays static

我不熟悉Java的所有行为,如果我犯了一个明显的错误,那就很抱歉。基本上我正在制作一个给出项目清单的程序。范围它计算可用于包括所有项目的百分比。例如,如果您有一篮水果,并且想要将Apple,Pears,Peaches没有项目低于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

为什么结果不同?这些是工作版本和损坏版本之间的唯一变化。我想使用大型列表并且不想手动输入数据(但我喜欢根据需要制作单个范围的灵活性),我是否使用Arrays.fill错误或其他一些菜鸟错误?

2 个答案:

答案 0 :(得分:4)

您正在比较苹果和橘子,对于静态测试,high_bound值为{60, 60, 20}但是当您使用Arrays.fill()时,您将其设置为{60,60,60}

答案 1 :(得分: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”