我不熟悉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错误或其他一些菜鸟错误?
答案 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”