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

配列にintnumbers変数を追加するのを手伝ってもらえますか?それから私は逆転を試みます。今、これを実行すると、9という数字の約24行が表示されます。また、サイズを指定せずに2D配列を実行する方法を教えてもらえますか?オンラインで調べましたが、方法がわかりません。ありがとう

4

2 に答える 2

3

これは宿題だと思うので、アドバイスをしますが、実際にコードを提供することはやめましょう。

まず、各行を分割して、各数値を表す文字列のリストを取得する必要があります。
その後、各数値の文字列表現を整数に変換する必要があります。
次に、ループして各intを配列に追加するのはそれほど難しくありません。
ラインを処理している間、現在の水平インデックスとすべてのラインにわたる垂直インデックスを追跡する必要があります。

その後、あなたはずっと近くにいるはずです。逆転をやってみて、また問題があれば戻ってきてください。

編集:

配列を作成するために、int変数からサイズを指定できます。String[] lines(行ごとに1つ)とString[] line(スペース文字で分割された行)がある場合linesは、次のように配列を宣言できます。

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

あなたはこのコードにかなり近づいています。
String.Splitの場合、必要な要素を区切る文字を指定する必要があります。

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

これは、ファイルの各行に対して1回実行する必要があるため、外側のループ内に移動する必要があります。同様に、int.TryParse番号ごとに1回実行する必要があるため、内側のループ内に配置する必要があります。

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

また、あなたのGetUpperBound呼び出しを監視する必要があります。 GetUpperBound(d)が返さGetLength(d) - 1れるため、インデックスが。以下の場合はループする必要がありますGetUpperBoundGetUpperBound呼び出しをGetLength(0)(列)と(行)に置き換えることもできますGetLength(1)
渡される数値GetUpperBoundGetLengthは、サイズを取得する方向です。これらすべてに0を渡しています。これは、配列が正方形でない限り機能しません。

反転ループでは、内側のループの2行目にエラーがあります。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 に答える