0

编辑代码

带有我要反转的行的文本文件包含这些数字:

1 2 3 4 5 6 7 8 9 10  
11 12 13 14 15 16 17 18 19 20  
21 22 23 24 25 26 27 28 29 30  
31 32 33 34 35 36 37 38 39 40  
41 42 43 44 45 46 47 48 49 50  
51 52 53 54 55 56 57 58 59 60  
61 62 63 64 65 66 67 68 69 70  
71 72 73 74 75 76 77 78 79 80  
81 82 83 84 85 86 87 88 89 90  
91 92 93 94 95 96 97 98 99 100  

到目前为止,我的数组看起来像这样:

 static void Main()
    {            
            int numbers;

            StreamReader fileReader = new StreamReader(fileDirectory);
            string line  = fileReader.ReadLine();
            fileReader.Close();
            string[] Split = line.Split();
            int.TryParse(line, out numbers);

            int[,] Table = new int [10,10];

                for (int row = 0; row < Table.GetUpperBound(0); row++)
                {
                    for (int column = 0; column < Table.GetUpperBound(0); column++)
                    {

                    }
                }


                for (int row = 0; row < Table.GetUpperBound(0); row++)
                {
                    for (int column = 0; column < Table.GetUpperBound(0); column++)
                    {
                        int tempHolder = Table[row, column];
                        Table[row, column] = Table.GetUpperBound(0);
                        Table[row, Table.GetUpperBound(0) - column] = tempHolder;
                        Console.WriteLine(Table[row, column]);
                        Console.Write(" ");
                    }
                    Console.WriteLine();
                }Console.Write(" ");
        }

你能帮我将 int numbers 变量添加到数组中,然后我将尝试反转。现在,如果我运行它,我会得到大约 24 行的数字 9。还有人可以告诉我如何做一个 2d 数组而不必指定它的大小吗?我在网上看过,但不知道怎么做。谢谢

4

2 回答 2

3

我认为这是家庭作业,所以我会给出一些建议,但实际上没有提供代码。

首先,您必须拆分每一行以获得代表每个数字的字符串列表。
之后,您需要将每个数字的字符串表示形式转换为整数。
然后循环并将每个 int 添加到数组中应该不会太难。
您需要在处理一行时跟踪当前的水平索引,以及所有行的垂直索引。

在那之后你应该更接近。尝试进行逆转,如果再次遇到问题,请返回。

编辑:

要创建数组,您可以从 int 变量中指定大小。如果你有String[] lines(每行一个)和String[] linelines由空格字符分割的一行),你可以像这样声明数组:

int[,] table = new int[line.Length, lines.Length];

你已经非常接近这段代码了。
对于 String.Split,您需要告诉它哪个字符分隔您想要的元素:

String[] split = line.Split(' ');

这需要对文件中的每一行执行一次,因此应将其移到外循环内。同样,int.TryParse每个数字都需要做一次,所以它应该在内部循环中。

int number;
if (int.TryParse(split[column], out number))
{
    table[column, row] = number;
}

你也应该注意你的GetUpperBound电话。 GetUpperBound(d)返回GetLength(d) - 1,因此您需要在索引小于或等于时循环GetUpperBound。您还可以将GetUpperBound调用替换为GetLength(0)(Columns) 和GetLength(1)(rows)。
传递给GetUpperBoundand的数字GetLength是您想要获取大小的方向。您将 0 传递给所有这些,除非数组是方形的,否则这将不起作用。

在反向循环中,内部循环的第二行出现错误。您正在设置Table[row, column]数组的大小,而不是要交换的元素。您还只需要循环到每行的中间,否则您只需将元素交换回后半部分的原始位置。

于 2012-11-30T00:29:42.403 回答
1

我会给你一些更多的提示、技巧并提供一些代码。

1..您需要将文本文件中的值放入数组中

string arrayLine = "";

try
{
    StreamReader fileReader = new StreamReader("C:\\Numbers.txt");
    string line = fileReader.ReadLine();

    while (line != null)
    {
        Console.WriteLine(line);

        if (arrayLine != "")
        {
             arrayLine += " " + line; // Add the rest of the number lines together
        }
        else
        {
             arrayLine = line;  // Add the first line
        }

        line = fileReader.ReadLine();    
    }
    fileReader.Close();
} 
catch (IOException IOEx)
{
    throw new Exception("no file found");
}
catch (Exception ex)
{
    throw new Exception("Other Exception found");
}

// Add the numbers into an array
int[] myNumberArray = SplitStringToNumbersArray(arrayLine);

将字符串拆分为数字数组的方法如下

static private int[] SplitStringToNumbersArray(string _Numbers)
{
    _Numbers = _Numbers.Replace("  ", " "); 
    string[] pieces = _Numbers.Split(' ');
    int[] ret = new int[pieces.Length];
    for (int i = 0; i < pieces.Length; i++)
    {
        ret[i] = int.Parse(pieces[i]);
    }
    return ret;
}

2..你想反转数组。这是一个示例和信息

在 C# 中反转数组

3.. 数组已经颠倒,所以现在你要遍历数组(从第 99 个位置开始并递减)并在每行添加 10 个数字。我会给你它的骨架代码,你可以填写其余的

string result = ""; // Used as the temporary string

for (int i = (reversedArray.Length-1); i > -1; i--)
{
    if ((i % 10 == 0))
    {
        // this is the 10th number you are adding to the string
        // This string is complete, What should you do now? 
    }
    else
    {
        // Keep adding to the string  
    }
}

// You have completed it so add the next line so you can see the result
Console.ReadLine();
于 2012-11-30T02:05:19.537 回答