如何将其置于循环中?

时间:2016-05-18 15:54:28

标签: java

我几个小时以来一直在考虑这个问题,但似乎找不到合适的解决方案。

我有这段代码,理论上可以无限长:

y(1) = x(1)*h(1);
y(2) = x(1)*h(2)+x(2)*h(1);
y(3) = x(1)*h(3)+x(2)*h(2)+x(3)*h(1);
y(4) = x(1)*h(4)+x(2)*h(3)+x(3)*h(2)+x(4)*h(1);
y(5) = x(1)*h(5)+x(2)*h(4)+x(3)*h(3)+x(4)*h(2)+x(5)*h(1);
y(6) =           x(2)*h(5)+x(3)*h(4)+x(4)*h(3)+x(5)*h(2)+x(6)*h(1);
y(7) =                     x(3)*h(5)+x(4)*h(4)+x(5)*h(3)+x(6)*h(2);
y(8) =                               x(4)*h(5)+x(5)*h(4)+x(6)*h(3);
y(9) =                                         x(5)*h(5)+x(6)*h(4);
y(10) =                                                  x(6)*h(5);

为了最大限度地减少写入工作并使其普遍适用,我想把它放入(可能是?)两个循环,但我不知道如何。也许两个动态计算变量的for循环?但是我又不知道如何把它拉下来。

3 个答案:

答案 0 :(得分:1)

这样做,而尺寸是你的动态尺寸

    Double[] yArray = new Double[sizw];

      for(int i=0;i < yArray.length-4;i++) {
         for(int j=0;j<5;j++) {
            yArray[i+j] = x(i+1)*h(j+1);
         }

     }

答案 1 :(得分:1)

我假设你正在使用C#。

for(int loop=1;loop<=10;loop++) {
  y[loop] = get_y[loop];
}
int get_y(int index) {
  int ret = 0;
  for(int loop=1;loop<=index) {
    ret += x[loop]*h[index-loop+1];
   }
   return ret;
 }

答案 2 :(得分:1)

这很有趣!

注意测试它,似乎工作正常。使用x和h我的结果是: y(1)= 6

y(2)= 17

y(3)= 34

y(4)= 58

y(5)= 90

y(6)= 115

y(7)= 116

y(8)= 106

y(9)= 84

y(10)= 49

void DoCalcs () {
    for (int i = 1; i <= 10; i++) {
        int result = Y (i);
    }
}


int Y (int i) {
    //calculate start index for x
    int xIndex = Math.Max (1, i - 4);

    //calculate end index for x
    int endXIndex = Math.Min (6, i);

    //running sum
    int totalresult = 0;

    //loop through h until reaches zero, or until we run out terms in the sum
    for (int startHIndex = Math.Min (5, i); startHIndex >= 1; startHIndex--) {
        totalresult += X (xIndex) * H (startHIndex);
        xIndex++;

        //if we run out of terms, break out and return result
        if (xIndex > endXIndex) {
            return totalresult;
        }

    }
    //otherwise return error
    return -9999;
}


int X (int i) {
    return i + 1;
    //this could be whatever
}

int H (int i) {
    return i + 2;
    //this could be whatever
}

希望有所帮助!

修改: 如果你需要让它继续无穷大,只需删除breakout return语句,并在结尾处返回总数。