我有以下代码;
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索引的数组?
非常感谢任何建议。
答案 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);