0

I have attached the code below. There is a array called Checker and I pass values to it but I don't get values when the loop iterates.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 0;
            //String which have my coordinates
            string TextFile = "[(27, 37), (27, 38), (27, 163), (27, 164), (27, 266), (27, 267), (27, 356), (27, 357), (27, 448), (27, 449), (27, 528), (27, 529), (28, 37), (28, 38), (28, 163), (28, 164), (28, 266), (28, 267), (28, 356), (28, 357), (28, 448), (28, 449), (28, 528), (28, 529), (51, 163), (51, 164), (51, 266), (51, 267), (51, 356), (51, 357), (51, 448), (51, 449), (52, 61), (52, 62), (52, 163), (52, 164), (52, 266), (52, 267), (52, 280), (52, 305), (52, 306), (52, 356), (52, 357), (52, 448), (52, 449), (52, 504), (52, 505), (53, 61), (53, 62), (53, 280), (53, 281), (53, 305), (53, 306), (53, 504), (53, 505), (355, 61), (355, 62), (355, 280), (355, 281), (355, 305), (355, 306), (355, 504), (355, 505), (356, 61), (356, 62), (356, 280), (356, 281), (356, 305), (356, 306), (356, 504), (356, 505), (380, 37), (380, 38), (380, 528), (380, 529), (381, 37), (381, 38), (381, 528), (381, 529)]";
            string splits = TextFile.TrimStart('[');
            string[] split = TextFile.Split(')');

            string split_1 = null;
            string split_2 = null;
            string split_3 = null;

            int pos = 0;
            int lengthOfString = 0;
            int valX, valZ, valX1, valZ1 = 0;

            /*
             * Getting the count of the coordinates in the array
             */
            foreach (string x in split)
            {
                count++;
            }

            string[] stringArr = new string[count];

            /*
             * Splitting the coordinates as x,y and store in an array
             */
            foreach (string coord in split)
            {
                split_1 = coord;
                split_1 = split_1.Trim('[');
                split_1 = split_1.Trim('(');
                split_1 = split_1.Trim(',');
                split_1 = split_1.Trim(' ');
                split_1 = split_1.Trim('(');
                split_1 = split_1.TrimEnd(']');
                stringArr[pos] = split_1;
                pos++;
            }

            Console.WriteLine("Array Length " + stringArr.Length);

            /*
             * extracting simalar x coordinates
             */
            Console.WriteLine("");
            Console.WriteLine("-----------------extracting simalar x coordinates----------------");
            Console.WriteLine("");
            int[] checker = new int[count];
            //checker[0] = 37;
            int indexX = 0;
            int loopRunX = 0;
            for (int a = 0; a < stringArr.Length - 1; a++)
            {
                Console.WriteLine("");
                Console.WriteLine("loop begining");
                Console.WriteLine("Checker value loop 1 : " + checker[a]);
                split_2 = stringArr[a];
                lengthOfString = split_2.Length;

                valX = int.Parse(split_2.Substring(0, split_2.IndexOf(',')));
                valZ = int.Parse(split_2.Substring(split_2.IndexOf(' '), (lengthOfString - split_2.IndexOf(' '))));
                Console.WriteLine("Checker value loop 1: " + checker[a]);
                if (checker[a] != valZ)
                {
                    Console.WriteLine("valZ " + valZ);
                    checker[a] = valZ;
                    Console.WriteLine("Checker value if : " + checker[a]);
                    int countx = 0;
                    for (int x1 = a; x1 < stringArr.Length - 1; x1++)
                    {
                        split_3 = stringArr[x1];
                        lengthOfString = split_3.Length;

                        valX1 = int.Parse(split_3.Substring(0, split_3.IndexOf(',')));
                        valZ1 = int.Parse(split_3.Substring(split_3.IndexOf(' '), (lengthOfString - split_3.IndexOf(' '))));

                        //Check for the simillar x in the text file we provide
                        if (valZ == valZ1)
                        {
                            countx++;
                            Console.WriteLine("Y is " + valZ + " and the coordinates which have simillar z ==> (" + valX1 + ", " + valZ1 + "). Index is " + x1 + " Count is " + countx);
                        }
                    }
                    loopRunX++;
                    indexX = indexX + countx;
                    Console.WriteLine("Next Index to check onwards : " + indexX);
                    Console.WriteLine("Looping Count : " + loopRunX);

                    Console.WriteLine("Checker value  outter loop 2: " + checker[a]);

                }
                Console.WriteLine("Checker value after loop 2: " + checker[a]);
                Console.WriteLine("");
            }
            Console.ReadLine();
        }
    }
}

this is the result I get.

Result

When the code is executed once, 37 will be inserted to the checker array. In the next iteration that array will be empty. Where did I go wrong?

4
  • Am I correct that you expect "Checker value loop 1 : 0" to be "Checker value loop 1 : 37" when loopRunX > 0? Commented Jun 3, 2016 at 10:42
  • 2
    Working fire here. I think there is a far more easier solution, could you explain what you're trying to achieve instead of what the problem is ? Commented Jun 3, 2016 at 10:42
  • Please try to ask more focused questions like when you cannot understand the behavior of a specific C# expression or don't know how to express something. Otherwise it gets closed as off-topic. This is not a "coding helping" community. Commented Jun 3, 2016 at 10:48
  • Hey, what about using your best friend. Um, I meant the debugger.. Commented Jun 3, 2016 at 11:02

2 Answers 2

1

Try this

            string TextFile = "[(27, 37), (27, 38), (27, 163), (27, 164), (27, 266), (27, 267), (27, 356), (27, 357), (27, 448), (27, 449), (27, 528), (27, 529), (28, 37), (28, 38), (28, 163), (28, 164), (28, 266), (28, 267), (28, 356), (28, 357), (28, 448), (28, 449), (28, 528), (28, 529), (51, 163), (51, 164), (51, 266), (51, 267), (51, 356), (51, 357), (51, 448), (51, 449), (52, 61), (52, 62), (52, 163), (52, 164), (52, 266), (52, 267), (52, 280), (52, 305), (52, 306), (52, 356), (52, 357), (52, 448), (52, 449), (52, 504), (52, 505), (53, 61), (53, 62), (53, 280), (53, 281), (53, 305), (53, 306), (53, 504), (53, 505), (355, 61), (355, 62), (355, 280), (355, 281), (355, 305), (355, 306), (355, 504), (355, 505), (356, 61), (356, 62), (356, 280), (356, 281), (356, 305), (356, 306), (356, 504), (356, 505), (380, 37), (380, 38), (380, 528), (380, 529), (381, 37), (381, 38), (381, 528), (381, 529)]";
            TextFile = TextFile.Trim(new char[] { '[', ']' });
            int[][] data = TextFile.Split(new char[] { '('}, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => x.Trim()).Select(x => x.Trim(new char[] { ',' })).Select(x => x.Trim(new char[] { ')' }))
                .Select(y => y.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                .Select(z => z.Select(a => int.Parse(a)).ToArray()).ToArray();
Sign up to request clarification or add additional context in comments.

Comments

1

If I understood you correctly,

When the loop starts value of a is 0.
Line 69 & 75 prints the value of checkers[a] ie checkers[0] ie 0.
And line 79 assign values to checkers[a] ie checkers[0].

You are printing value of checkers before it’s assigned.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.