我有以下代码;
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 和 maxValForRange 是动态变量(在本例中为 1 和 300),因此上面的代码会抛出异常:
length=300; index=300
如何拥有一个从 minValueRange 索引的数组?
非常感谢您的建议。
最佳答案
How to have an array which is indexed from minValueRange please?
在 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
在数组分配上,将使用 <
而不是<=
在循环中:
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
执行必要数学运算的方法,这样您就不必在整个代码中重复它,并将数组包装在该类中。
您还可以执行 ArrayList
执行必要数学运算的子类。
关于Java : Simple array with custom range of values (int)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33125367/