我有一个方法,它接受一个字符串数组,并根据长度每隔几项找到平均值。我希望该方法根据偏移量的值删除数组中的前几项。
public static double[] getMovingAverage(String[] priceList, int length, int offset){
double[] newPriceList = convert(priceList);
int listLength = newPriceList.length;
int counter = 0;
double listsum;
double[] movingAverage = new double[listLength];
try{
for (int aa = 0; aa < listLength-1; aa++){
listsum = 0;
for (int bb = 0; bb < length; bb++){
counter = aa+bb;
listsum = listsum + newPriceList[counter];
}
movingAverage[aa] = listsum / length;
}
if (offset>0){
//remove first #offset# elements
}
}catch(Exception e){
System.out.println(e);
}
return movingAverage;
}
*注意:convert();将String[]转换为双[]
数组在Java中是固定长度的。(你不能改变数组的长度。)
然而,您可以很容易地创建一个新的数组,其中第一个offset
元素被删除:
double[] movingAverage = { 0.1, 0.2, 1.1, 1.2 };
int offset = 2;
// print before
System.out.println(Arrays.toString(movingAverage));
// remove first offset elements
movingAverage = Arrays.copyOfRange(movingAverage, offset, movingAverage.length);
// print after
System.out.println(Arrays.toString(movingAverage));
输出:
[0.1, 0.2, 1.1, 1.2]
[1.1, 1.2]
来自Java 6 API
公共静态双[]copyOfRange(双[]原稿,int from,int到)
复制的指定范围指定的数组转换为新数组。这个范围(从)的初始索引必须位于零和原始长度之间,包含全部费用原始值[from]被放置到的初始元素中副本(除非来自==original.length或from==to)。价值观中的后续元素原始数组被放入副本中的后续元素。这个范围(到)的最终索引必须大于或等于from,可以大于原始长度,在这种情况下,0d被放在所有索引为的副本的元素大于或等于original.length-起始。的长度返回的数组将是to-from。
参数:original-来自的数组要从中复制范围-范围的初始索引已复制,包含到-最终索引要复制的范围的,独占。(此索引可能位于数组。)
返回:一个新数组包含从原始数组,截断或用零填充以获得要求长度
投掷:ArrayIndexOutOfBoundsException-if从<0或from>original.length()IllegalArgumentException-如果来自>到NullPointerException-如果是原始的为null,因为:1.6
与其删除项目,为什么不创建一个较小大小的新列表作为输出,并始终使用索引偏移量作为其中的索引?
也许其中一个Arrays.copyOfRange()方法就可以了?
http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOfRange(boolean[],int,int)
您不能从数组中显式删除,但可以使用其他数据结构,如ArrayList,来累积结果。不过,在您的情况下,您可能只想更改代码以正确调整阵列的大小,即
double[] movingAverage = new double[listLength-offset];
和
for (int aa = 0; aa < listLength-offset; aa++){
为了防止数组的复制,可以使用像LinkedList这样的集合类,该类的头部有O(1)remove操作。
http://download.oracle.com/javase/6/docs/api/java/util/LinkedList.html