我有一个大约有1000个条目的数组,每年分成12个条目,我试图找到每年的最大值,这样做我需要一次读取12个值并查找那些12的最大值,然后继续从数组中接下来的12个值,依此类推,直到它完成。
尝试这样做我创建了一个临时数组来存储12个值,以及每年最高分数的最终数组。下面的代码不起作用,我不确定为什么,我花了很长时间研究并尝试使用不同的解决方案,任何帮助将不胜感激:)
;WITH GLOBALHIERARCHY AS
(
SELECT A.OID,A.PARENTOID,A.NAME
FROM LOCATIONDETAIL A
WHERE OID = @LOCATIONDETAILOID
UNION ALL
SELECT A.OID,A.PARENTOID,A.NAME
FROM LOCATIONDETAIL A INNER JOIN GLOBALHIERARCHY GH ON A.PARENTOID = GH.OID
)
SELECT * FROM GLOBALHIERARCHY
答案 0 :(得分:2)
很难在不知道代码生成的情况下看到代码出了什么问题,但无论如何这并不是一个很好的方法。
我假设您受限于一个长数组的输入格式,即使多维数组可能更有意义,这取决于它用于什么。
// double rain[] = new double[1268]; // input
double maxRAINyear[] = new double[(rain.length+11) / 12];
double max = Double.NEGATIVE_INFINITY;
for (int i = 0; i < rain.length; i++)
{
if (rain[i] > max) max = rain[i];
if (i % 12 == 0)
{
maxRAINyear[i / 12] = max;
max = Double.NEGATIVE_INFINITY;
}
}
if (rain.length % 12 != 0) maxRAINyear[maxRAINyear.length-1] = max;
计算每12个数字的最大值,而不是单独存储它们并对它们进行排序。我假设存储了整整多年。如果您想在结束时考虑部分年份,则需要对其进行修改。
答案 1 :(得分:0)
我在没有临时数组的情况下实现它,但只是迭代数组。这应该更有效率。
int amountOfYears = rain.length/12-3;
double maxRAINyear[]= new double [amountOfYears];
for(int i=0;i<amountOfYears;i++){
//Find maximum for these 12 indixes
double max = Double.NEGATIVE_INFINITY;
for(int j=12*i+36;j<12*(i+1)+36;j++){ //use 12*i as an offset, that way, you don't need a temp array
if(rain[j] > max)
max = rain[j];
}
//store maximum
maxRAINyear[i] = max;
}
如果您还需要查找部分年份,请使用此
int amountOfYears = Math.ceil(rain.length/12f)-3;
double maxRAINyear[]= new double [amountOfYears];
for(int i=0;i<amountOfYears;i++){
//Find maximum for these 12 indixes
double max = Double.NEGATIVE_INFINITY;
int start = 12*i+36;
int end = Math.min(rain.length,12*(i+1)+36);
for(int j=start;j<end;j++){ //use 12*i as an offset, that way, you don't need a temp array
if(rain[j] > max)
max = rain[j];
}
//store maximum
maxRAINyear[i] = max;
}
答案 2 :(得分:0)
当count
为11时,您将其递增到12并进入下一轮循环。现在temp[count] = rain[c];
将尝试将值存储到temp
的索引12中,但是只有12个条目的索引为0到11.所以我怀疑你得到的是ArrayIndexOutOfBoundsException
。
我相信你应该在count++
声明之前移动if
。这样,在创建任何破坏之前,12的计数将重置为0.
答案 3 :(得分:0)
如果数组长度不是范围的倍数而没有进行多次检查,则此解决方案具有优势。
getUserMedia