Java 为什么在使用Array.fill和手动创建列表时会得到不同的结果?

Java 为什么在使用Array.fill和手动创建列表时会得到不同的结果?,java,arrays,static,Java,Arrays,Static,我对Java的所有行为都不太熟悉,如果我犯了一个明显的错误,那么很抱歉。基本上,我正在制作一个程序,给出一个项目列表&它计算可以包括所有项目的百分比。例如,如果你有一篮水果,想把苹果、梨、桃子放在其中,但没有一个项目低于20%,没有一个项目高于60%,程序会告诉你 为了做到这一点,我有一个包含下限(最小百分比)和上限(最大百分比)的列表。我的问题是,当我手动创建列表时,它似乎起作用(使用上面的示例,3个项目,20-60个范围,我得到41个项目),但当我使用数组。fill时,我得到882个结果(这

我对Java的所有行为都不太熟悉,如果我犯了一个明显的错误,那么很抱歉。基本上,我正在制作一个程序,给出一个项目列表&它计算可以包括所有项目的百分比。例如,如果你有一篮水果,想把苹果、梨、桃子放在其中,但没有一个项目低于20%,没有一个项目高于60%,程序会告诉你

为了做到这一点,我有一个包含下限(最小百分比)和上限(最大百分比)的列表。我的问题是,当我手动创建列表时,它似乎起作用(使用上面的示例,3个项目,20-60个范围,我得到41个项目),但当我使用
数组。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

为什么结果不同?这些是工作版本和损坏版本之间的唯一更改。我想使用较大的列表,不想手动输入数据(但我喜欢灵活设置各个范围,如果我愿意的话),我是使用Array.fill错误还是其他新手错误?

这没有意义,因为Array.fill代码是:

    public static void fill(long[] a, long val) {
        for (int i = 0, len = a.length; i < len; i++)
            a[i] = val;
    }
公共静态空白填充(长[]a,长val){
for(int i=0,len=a.length;i
生成的数组看起来与静态初始化完全相同


另外,我用两个初始化运行了您的代码,得到了相同的结果:“结果的总大小为882”

这没有意义,因为Array.fill代码是:

    public static void fill(long[] a, long val) {
        for (int i = 0, len = a.length; i < len; i++)
            a[i] = val;
    }
公共静态空白填充(长[]a,长val){
for(int i=0,len=a.length;i
生成的数组看起来与静态初始化完全相同


另外,我用两个初始化运行了您的代码,得到了相同的结果:“结果的总大小是882”

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

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