我已附上以下代码。有一个名为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();
}
}
}
这是我得到的结果。
当代码执行一次时,37将被插入到检查器数组中。在下一次迭代中,该数组将为空。我哪里出错了?
答案 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]。
您在分配之前打印了检查器的值。