Search code examples
c#winforms

Why is this pulling the wrong data from my list?


I have a simple form. I'm working with six separate ranges of numbers, such as 0-1.57, 1.57-6.35, 6.35-12.7, etc.

Depending on the class selected, A, B, C, etc. it returns different tolerances for each range. The tolerances are in separate lists for each class.

It works as such, "if (this is and this are selected), use this list, else, if (this and this are selected), use this other list.

My first range works as it should, accurately pulling the numbers from the list. Five of the ranges for the second class work as they should, but the last range in the class won't return the correct tolerance. It keeps grabbing the tolerance for the number 4 spot, when it should be grabbing it from the number 5 spot.

This is nothing fancy, and I'm sure you'll see a much better way to do this, but I'm just trying to learn different things.

The last eleven lines in bold are the lines not returning the correct result. It keeps returning the results from [4] in the ClassB lists, rather than number [5], however, the ClassA lists works fine.

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private List<Double> ClassAPlus = new List<Double> { 0.080, 0.130, 0.150, 0.200, 0.250, 0.250 };
        private List<Double> ClassAMinus = new List<Double> { 0.030, 0.050, 0.080, 0.100, 0.100, 0.130 };

        private List<Double> ClassBPlus = new List<Double> { 0.080, 0.250, 0.300, 0.400, 0.500, 0.500 };
        private List<Double> ClassBMinus = new List<Double> { 0.030, 0.100, 0.100, 0.150, 0.150, 0.250 };
        private void btnEnter_Click(object sender, EventArgs e)
        {
            double Diameter, Plus, Minus, Nominal, Tolerance;
            if (double.TryParse(txtSize.Text, out Diameter)) ;

            if (rbA.Checked == true && rbMetric.Checked == true)
                if (Diameter <= 1.57)
                {
                    Plus = (Diameter + ClassAPlus[0]);
                    Minus = (Diameter - ClassAMinus[0]);
                    Nominal = (Plus + Minus) / 2;
                    Tolerance = Plus - Nominal;
                    lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                    lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassAPlus[0].ToString("0.000") + " /- " + ClassAMinus[0].ToString("0.000");
                    lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
                }
            if (Diameter > 1.57 || Diameter == 6.35)
            {
                Plus = (Diameter + ClassAPlus[1]);
                Minus = (Diameter - ClassAMinus[1]);
                Nominal = (Plus + Minus) / 2;
                Tolerance = Plus - Nominal;
                lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassAPlus[1].ToString("0.000") + " /- " + ClassAMinus[1].ToString("0.000");
                lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
            }
            if (Diameter > 6.35 || Diameter == 12.7)
            {
                Plus = (Diameter + ClassAPlus[2]);
                Minus = (Diameter - ClassAMinus[2]);
                Nominal = (Plus + Minus) / 2;
                Tolerance = Plus - Nominal;
                lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassAPlus[2].ToString("0.000") + " /- " + ClassAMinus[2].ToString("0.000");
                lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
            }
            if (Diameter > 12.7 || Diameter == 19.05)
            {
                Plus = (Diameter + ClassAPlus[3]);
                Minus = (Diameter - ClassAMinus[3]);
                Nominal = (Plus + Minus) / 2;
                Tolerance = Plus - Nominal;
                lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassAPlus[3].ToString("0.000") + " /- " + ClassAMinus[3].ToString("0.000");
                lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
            }
            if (Diameter > 19.05 || Diameter == 25.4)
            {
                Plus = (Diameter + ClassAPlus[4]);
                Minus = (Diameter - ClassAMinus[4]);
                Nominal = (Plus + Minus) / 2;
                Tolerance = Plus - Nominal;
                lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassAPlus[4].ToString("0.000") + " /- " + ClassAMinus[4].ToString("0.000");
                lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
            }
            if (Diameter > 25.4)
            {
                Plus = (Diameter + ClassAPlus[5]);
                Minus = (Diameter - ClassAMinus[5]);
                Nominal = (Plus + Minus) / 2;
                Tolerance = Plus - Nominal;
                lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassAPlus[5].ToString("0.000") + " /- " + ClassAMinus[5].ToString("0.000");
                lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
            }
            else
            {
                if (rbB.Checked == true && rbMetric.Checked == true)
                {
                    if (Diameter <= 1.57)
                    {
                        Plus = (Diameter + ClassBPlus[0]);
                        Minus = (Diameter - ClassBMinus[0]);
                        Nominal = (Plus + Minus) / 2;
                        Tolerance = Plus - Nominal;
                        lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                        lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassBPlus[0].ToString("0.000") + " /- " + ClassBMinus[0].ToString("0.000");
                        lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
                    }
                    if (Diameter > 1.57 || Diameter == 6.35)
                    {
                        Plus = (Diameter + ClassBPlus[1]);
                        Minus = (Diameter - ClassBMinus[1]);
                        Nominal = (Plus + Minus) / 2;
                        Tolerance = Plus - Nominal;
                        lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                        lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassBPlus[1].ToString("0.000") + " /- " + ClassBMinus[1].ToString("0.000");
                        lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
                    }
                    if (Diameter > 6.35 || Diameter == 12.7)
                    {
                        Plus = (Diameter + ClassBPlus[2]);
                        Minus = (Diameter - ClassBMinus[2]);
                        Nominal = (Plus + Minus) / 2;
                        Tolerance = Plus - Nominal;
                        lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                        lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassBPlus[2].ToString("0.000") + " /- " + ClassBMinus[2].ToString("0.000");
                        lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
                    }
                    if (Diameter > 12.7 || Diameter == 19.05)
                    {
                        Plus = (Diameter + ClassBPlus[3]);
                        Minus = (Diameter - ClassBMinus[3]);
                        Nominal = (Plus + Minus) / 2;
                        Tolerance = Plus - Nominal;
                        lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                        lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassBPlus[3].ToString("0.000") + " /- " + ClassBMinus[3].ToString("0.000");
                        lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
                    }
                    if (Diameter > 19.05 || Diameter == 25.4)
                    {
                        Plus = (Diameter + ClassBPlus[4]);
                        Minus = (Diameter - ClassBMinus[4]);
                        Nominal = (Plus + Minus) / 2;
                        Tolerance = Plus - Nominal;
                        lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                        lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassBPlus[4].ToString("0.000") + " /- " + ClassBMinus[4].ToString("0.000");
                        lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");
                    }
                    **if (Diameter > 25.4)
                    {
                        Plus = (Diameter + ClassBPlus[5]);
                        Minus = (Diameter - ClassBMinus[5]);
                        Nominal = (Plus + Minus) / 2;
                        Tolerance = Plus - Nominal;
                        lblResult.Text = Nominal.ToString("0.000") + "  ±" + Tolerance.ToString("0.000");
                        lblBilat.Text = Diameter.ToString("0.000") + "  +" + ClassBPlus[5].ToString("0.000") + " /- " + ClassBMinus[5].ToString("0.000");
                        lblRange.Text = (Nominal - Tolerance).ToString("0.000") + " - " + (Nominal + Tolerance).ToString("0.000");**
                    };
                }
            }
        }
    }
}

Solution

  • If you have exact same code as provided, then you should check your inner if-statements.

    1. First if (double.TryParse(txtSize.Text, out Diameter)) ; does not do anything

    2. if (rbA.Checked == true && rbMetric.Checked == true) apply only to if (Diameter <= 1.57)

    3. You have

       if (Diameter > 25.4)
       {
          ...your code
       }
       else{
          if (rbB.Checked == true && rbMetric.Checked == true)
          {
              ...your code...
              **if (Diameter > 25.4){}
          }
       }
      

    So your code go into else only if NOT > 25.4 and inside it you again have if >25.4. It will never go inside it. You need to put "first" part inside {} and then have "else" part.