【问题标题】:Why am I getting different results when using Arrays.fill vs. manually making the list?为什么在使用 Arrays.fill 与手动制作列表时会得到不同的结果?
【发布时间】:2012-05-25 18:04:43
【问题描述】:

我对 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

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

【问题讨论】:

    标签: java arrays static


    【解决方案1】:

    您正在比较 Apples 和 Oranges,对于您的静态测试,high_bound 的值为 {60, 60, 20},但当您使用 Arrays.fill() 时,您将其设置为 {60, 60, 60}。

    【讨论】:

      【解决方案2】:

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

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

      生成的数组看起来与静态初始化完全相同。

      另外,我在初始化时运行了你的代码,得到了相同的结果:“结果的总大小是 882”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-11
        • 1970-01-01
        • 2015-04-06
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多