首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算不更新

计算不更新
EN

Stack Overflow用户
提问于 2017-08-08 15:33:56
回答 2查看 65关注 0票数 0

我已经用一个变量成功地运行了这个语法,但是现在我尝试将它更改为一个foeach()循环,并接受一系列的值并将结果显示为一个消息框。我在语法上的问题是,ecll总是保留传递的第一个数字的值,并且对数组中的每个后续数字都不会更新计算。

我在哪里错误地阻止了对数组中的每个后续数字进行更新?

代码语言:javascript
复制
private void btnGetData_Click(object sender, EventArgs e)
{
  int start = 2;
  int end = 10;

  int[] nums = Enumerable.Range(start, end - start).ToArray();

  foreach (int n in nums)
  {  
      float tp_x = 0, tp_y = 0;

      SAP = new List<PointF>();
      float fbw = m_pd.bl[m_pd.bl.Count - 1].m_Width;
      float Location1_X = tp_x + fbw;
      float Location1_Y = tp_y;
      SAP.Add(new PointF(Location1_X, Location1_Y));

      float iBH = gbh(m_pd.bl.Count - 1);
      float lbw = m_pd.bl[0].m_Width;
      float Location2_X = tp_x + lbw;
      float Location2_Y = tp_y + (iBH) + 1.5f;

      PointF rip = new PointF();
      if (!Getrip(ftp, rhep, ref rip))
      {
        SAP = null;
        return;
      }

      for (int iRowIndex = saii; iRowIndex < m_pd.pp.Count; iRowIndex++)
      {
        float Xvalue = m_pd.pp[iRowIndex].X;
        float Yvalue = m_pd.pp[iRowIndex].Y;
        SAP.Add(new PointF(Xvalue, Yvalue));

        if (Yvalue == LeftIntersectionPoint.Y)
        {
          pp.X = Xvalue;
          pp.Y = Yvalue;
          continue;
        }

        if (Xvalue >= rip.X)
        {
          Xvalue = rip.X;
          SAP[SAP.Count - 1] = new PointF(rip.X, rip.Y);
        }

        if (Xvalue == rip.X)
        {
          break;
        }

        pp.X = Xvalue;
        pp.Y = Yvalue;
      }

      double ecll = Getll(Location1_X, Location1_Y, rip.X, rip.Y);

      Messagebox.Show(Convert.ToString(ec11));
      txtLength.Text = ll.ToString("0.00");
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-08 16:14:54

我觉得这更像是一个基于这里发生的事情的评论,但我有点需要代码部分来更好地解释这一点。

让我们简化一下,远离你的点、宽度等。我想我们都同意,在你的函数中从来没有使用过n,所以让我们做一个类似的例子:

因此,我编写了一个函数,它将1与1相加。

代码语言:javascript
复制
var newNum = 1 + 1;

它实现了预期的结果,将newNum设置为2,但假设我希望增强它,以便它在num中增加1(从原始函数中):

代码语言:javascript
复制
int start = 2;
int end = 10;

int[] nums = Enumerable.Range(start, end - start).ToArray();

但是,如果我试图彻底重用我的功能:

代码语言:javascript
复制
foreach (int n in nums)
{
  var newNum = 1 + 1;
} 

每次传递,我都会将newNum设置为2,因为我没有使用这个变量。

我应该写的是:

代码语言:javascript
复制
foreach (int n in nums)
{
  var newNum = 1 + n;
} 

因此,根据您的2到10,在不同的迭代中,我应该看到newNum设置为3到11。

票数 2
EN

Stack Overflow用户

发布于 2017-08-08 16:01:22

“Foreach”循环中的每个迭代都为'n‘分配一个新值。但是,在循环体中,该值(n)不在计算的任何地方使用(除非我遗漏了什么)。当然,这些计算的结果都是一样的。

一旦你在一些计算中包含“n”,结果就会改变.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45572501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档