2017-08-08 6 views
0

この構文を1つの変数で正常に実行しましたが、今度はfoeach()ループに変更して値の範囲を取り、結果をメッセージボックスとして表示しようとしています。構文の私の問題は、ecllは常に渡された最初の数値の値を保持し、計算は配列の後続の数字ごとに決して更新されないということです。計算が更新されていません

どこでこれが原因でアレイの後続の番号ごとに更新されないのですか?

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"); 
    } 
} 
+0

これで、選択したツールセットのデバッガの使い方を学ぶ時間です。 – nvoigt

+0

@nvoigt - 私はVS2017を使用しています - 私はデバッガとイミディエイトウィンドウを使用して、Location1_XとLocation1_Yにnを変更すると値を変更しないように問題を追跡しました。しかし、なぜ私は見ていない。 –

+2

これらは1つのポイントに設定されています。そこにブレークポイントを置くことができます。彼らは 'n 'に依存しているように見えません、どうしてあなたはそれらが変わると思いますか? 'tp_x'と' tp_y'はその時点で常にゼロになります。 – nvoigt

答えて

2

を変更します私はこのように感じるが、ここで何が起こっているかに基づいて、コメントの詳細ですが、私は一種の必要これを私が信じているより良く説明するコードセクション。

私たちは、すべてのnは、あなたの関数内で使用されることはありませんことに同意することができると思うので、のは、同様の例をやらせるなど、幅、のは、離れてあなたのポイントから簡素化してみましょう:

だから私は、私が追加されますことを書いた機能を持っています1

var newNum = 1 + 1; 

1には、何が期待されているかい2にnewNumを設定しますが、のは、私はそれが(元の関数から)NUMSの番号に1を加算するように、それを強化したいとしましょう:

int start = 2; 
int end = 10; 

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

しかし、私は完全に私の機能を再利用しようとした場合:

foreach (int n in nums) 
{ 
    var newNum = 1 + 1; 
} 

ひとつひとつのパス、私はいつも、私は変数を使用していないので、newNumが2に設定されているつもりです。私は何をすべきか

はこれを書いている:

foreach (int n in nums) 
{ 
    var newNum = 1 + n; 
} 

ので、あなたの2〜10に基づいて、私はnewNumは、様々なイテレーションで11を介して3に設定されるはずです。

0

「foreachの」ループの各反復は、「N」に新しい値を割り当てます。 しかし、ループ本体では、その値(n)は計算上どこでも使用されません(何かが見つからない限り)。もちろん、これらの計算の結果は常に同じになります。すぐに含めるよう

「n」をcalclationsのいくつかで、結果は...

+0

が呼び出されますが、foreachループを含めるようにコードを修正する前に、rip.x&ripの計算では(配列に変更された)単一変数の値は使用されませんでした。 y。それが私の変更にそれを含めなかった理由です。 –

+0

しかし、現在書かれている方法では、「結果をn回何回も吐き出す」以外にnums/nを使用していません。 – Robert

+0

1つの変数が計算に影響を与えない場合、なぜその変数は結果を変更するには? –

関連する問題