编译时错误"在此范围内无法声明名为'xo'的局部变量..."

-7 c#

编译时,我收到以下错误:

名为'x0'的局部变量不能在此范围内声明,因为它会给'x0'赋予不同的含义,'x0'已在'父或当前'范围内使用,表示其他内容.

我该怎么做才能解决它?

代码是:

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Text;
 using System.Windows.Forms;

 namespace WindowsApplication1
 {
  public partial class Form1 : Form
  {
    float d1, d2, d3, d4, eta;
    float y1, y2, y3, y4;
    float w10, w11, w12;
    float w20, w21, w22;
    float w30, w31, w32;
    float w40, w41, w42;
    float x10, x11, x12;
    float x20, x21, x22;
    float x30, x31, x32;
    float x40, x41, x42;

    float net, net1, net2, net3, net4;

    float dw10, dw11, dw12;
    float dw20, dw21, dw22;
    float dw30, dw31, dw32;
    float dw40, dw41, dw42;

    public Form1()
    {
        InitializeComponent();
    }
    public void calculation(float x0, float x1, float x2,
                        float w0, float w1, float w2,
                        float d, float net, float y,
                        float dw0, float dw1, float dw2, float eta)

    {
      net = x0 * w0 + x1 * w1 + x2 * w2;

        if (net <= 0)
            y = 1;
        else
            y = -1;

        dw0 = eta * x0 * (d - net);
        dw1 = eta * x1 * (d - net);
        dw2 = eta * x2 * (d - net);

        string a = "{0:f2}   {1:f2}   {2:f2}   {3:f2}   {4:f2}    {5:f2}   {6:f2}   {7:f2}   {8:f2}    {9:f2}     {10:f2}    {11:f2}", x0, x1, x2, w0, w1, w2, d, net, y, dw0, dw1, dw2;
        listBox1.Items.Add(a);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        eta = Convert.ToSingle(textBox20);

        d1 = Convert.ToSingle(textBox19);
        d2 = Convert.ToSingle(textBox18);
        d3 = Convert.ToSingle(textBox17);
        d4 = Convert.ToSingle(textBox16);

        w10 = Convert.ToSingle(textBox3);
        w11 = Convert.ToSingle(textBox2);
        w12 = Convert.ToSingle(textBox1);
        int passes = 0;

        x10 = Convert.ToSingle(textBox7);
        x11 = Convert.ToSingle(textBox11);
        x12 = Convert.ToSingle(textBox15);
        x20 = Convert.ToSingle(textBox6);
        x21 = Convert.ToSingle(textBox10);
        x22 = Convert.ToSingle(textBox14);
        x30 = Convert.ToSingle(textBox5);
        x31 = Convert.ToSingle(textBox9);
        x32 = Convert.ToSingle(textBox13);
        x40 = Convert.ToSingle(textBox4);
        x41 = Convert.ToSingle(textBox8);
        x42 = Convert.ToSingle(textBox12);

        while (passes <= 100)
        {
            calculation(x10, x11, x12, w10, w11, w12, d1, net1, y1, dw10, dw11, dw12, eta);

            w20 = w10 + dw10;
            w21 = w11 + dw11;
            w22 = w12 + dw12;

            calculation(x20, x21, x22, w20, w21, w22, d2, net2, y2, dw20, dw21, dw22, eta);

            w30 = w20 + dw20;
            w31 = w21 + dw21;
            w32 = w22 + dw22;

            calculation(x30, x31, x32, w30, w31, w32, d3, net3, y3, dw30, dw31, dw32, eta);

            w40 = w30 + dw30;
            w41 = w31 + dw31;
            w42 = w32 + dw32;

            calculation(x40, x41, x42, w40, w41, w42, d4, net4, y4, dw40, dw41, dw42, eta);

            w10 = w40 + dw40;
            w11 = w41 + dw41;
            w12 = w42 + dw42;

            passes += 1;
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

}
Run Code Online (Sandbox Code Playgroud)

}

Yah*_*hia 6

改变线

string a = "{0:f2}   {1:f2}   {2:f2}   {3:f2}   {4:f2}    {5:f2}   {6:f2}   {7:f2}   {8:f2}    {9:f2}     {10:f2}    {11:f2}", x0, x1, x2, w0, w1, w2, d, net, y, dw0, dw1, dw2;
Run Code Online (Sandbox Code Playgroud)

string a = String.Format ( "{0:f2}   {1:f2}   {2:f2}   {3:f2}   {4:f2}    {5:f2}   {6:f2}   {7:f2}   {8:f2}    {9:f2}     {10:f2}    {11:f2}", x0, x1, x2, w0, w1, w2, d, net, y, dw0, dw1, dw2);
Run Code Online (Sandbox Code Playgroud)

一些额外的要点:

你的变量命名是非直观的,IMO反对良好的做法!

xo您的代码中没有- 您提到的错误是因为x0第二次声明而不是被使用.

有关详细信息,String.Format请参阅此MSDN链接.

  • @ user1151963我不是一个人工编译器/调试器......你提到的错误并没有出现在我所能告诉的ecode中...它出现在源代码的不同/不同版本中...一个新问题,具有重现问题所需的最少源,并显示编译器所抱怨的哪一行. (5认同)
  • @ user1151963,VS中有一个非常智能的调试器.只是使用它. (3认同)
  • @ user1151963创建一个新问题并提供重现问题的最小源代码... (2认同)
  • @ user1151963为什么你不能创建一个新问题?和:您在此评论中提供的来源不会重现该问题. (2认同)