虽然我将vales插入到我的数组中,但数组是空的

时间:2016-06-03 10:30:27

标签: c# arrays loops

我已附上以下代码。有一个名为Checker的数组,我将值传递给它,但是当循环迭代时我没有得到值。

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();
        }
    }
}

这是我得到的结果。

Result

当代码执行一次时,37将被插入到检查器数组中。在下一次迭代中,该数组将为空。我哪里出错了?

2 个答案:

答案 0 :(得分:1)

试试这个

            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();

答案 1 :(得分:1)

如果我理解正确,

当循环开始时a的值为0.
69号线&amp; 75打印检查器的值[a]即检查器[0]即0.
第79行为棋子[a]分配值,即棋子[0]。

您在分配之前打印了检查器的值。