Java:具有自定义值范围(int)的简单数组?

时间:2015-10-14 12:30:36

标签: java arrays

我有以下代码;

int minValForRange = myDataObj.getMinValue();
            int maxValForRange = myDataObj.getMaxValue();

            String[] arrOfRangesForSelection = new String[maxValForRange];

            Logger.d(String.valueOf(minValForRange));
            Logger.d(String.valueOf(maxValForRange));

            for (int i = minValForRange; i <= maxValForRange; i++) {
                arrOfRangesForSelection[i] = String.valueOf(i);
            }

minValForRange&amp; maxValForRange是动态变量(在这种情况下是1和300)所以上面这个案例代码抛出异常:

 length=300; index=300

如何获得一个从minValueRange索引的数组?

非常感谢任何建议。

3 个答案:

答案 0 :(得分:3)

  

如何获得一个从minValueRange索引的数组?

你不能用Java。你最好的选择就是根据需要进行数学计算(但我在下面提到了几个替代方案,实际上只是封装它),例如:

int minValForRange = myDataObj.getMinValue();
int maxValForRange = myDataObj.getMaxValue();

String[] arrOfRangesForSelection = new String[maxValForRange - minValForRange + 1];
// Enough room for the range (inclusive) -----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Logger.d(String.valueOf(minValForRange));
Logger.d(String.valueOf(maxValForRange));

for (int i = minValForRange; i <= maxValForRange; i++) {
    arrOfRangesForSelection[i - minValForRange] = String.valueOf(i);
    // The math ------------^^^^^^^^^^^^^^^^^^
}

(请注意,在上面我假设maxValForRange 应该,因为这是你编写循环的方式,这就是为什么我们+ 1在分配数组的行中。)

如果你没有希望包含maxValForRange(在编程中,我们通常包括下限而不是上限),你就不会{{1在数组分配上,将在循环中使用+ 1而不是<

<=

如果您愿意,您可以轻松编写一个类,该类将提供int minValForRange = myDataObj.getMinValue(); int maxValForRange = myDataObj.getMaxValue(); String[] arrOfRangesForSelection = new String[maxValForRange - minValForRange]; // No + 1 here --------------------------------------------------------------^ Logger.d(String.valueOf(minValForRange)); Logger.d(String.valueOf(maxValForRange)); for (int i = minValForRange; i < maxValForRange; i++) { // Just < here ----------------^ arrOfRangesForSelection[i - minValForRange] = String.valueOf(i); } get方法,这些方法可以进行必要的数学运算,因此您无需在代码中重复这些方法,并将该类中的数组。

您还可以执行一个set子类来完成必要的数学运算。

答案 1 :(得分:0)

对数组元素的访问是从零开始的,因此当您尝试访问maxValForRange时,您必须具有maxValForRange + 1大小;

答案 2 :(得分:0)

只需使用i&lt; maxVal而不是i&lt; = maxVal。

for (int i = minValForRange; i < maxValForRange; i++)
    arrOfRangesForSelection[i] = String.valueOf(i);