0

誰かが私を正しい方向に向けることができれば、非常に感謝しています。過去 2 か月間、Murach の C# 2013 ブックを使用して C# を学習してきました。これは良い本ですが、詳細が欠けている場合があります。私は配列で作業してきましたが、最終的に多次元配列を使い始めました。多次元配列が宣言され、ネストされた「Forループ」を使用して(4x4)乗算テーブルとして入力される単純なロジックを作成しました。これは期待どおりに機能します。問題は、ネストされた「For ループ」を使用して 2 次元配列内の特定の int 値を検索しようとしていることです。すべての行と列をループして int 値を見つけ、配列インデックス。オンラインで検索しましたが、確かな方向性を見つけることができませんでした。

目的: 掛け算の表が作成されたら、すべての列と行に "9" を配置したいと考えています。

誰かが私を連れて行ってくれたら素晴らしいことです。これが私のコードです。

//CONSTANT ARRAY LENGTH
const int multiTable = 4;

//ARRAY
int [ , ] multiplicationTableArr = 
      new int[multiTable, multiTable];  // 4 x 4 table 

//MULTIPLICATION METHOD
private void MultiplicationTable
{
    int r; //ROW
    int c; //COLUMN
    int result;

    for (r = 0; r < multiplicationTableArr.GetUpperBound(0); r++)
    {
        //NESTED FOR LOOP
        for (c = 0; c < multiplicationTableArr.GetUpperBound(0); c++)
        {
            result = (r + 1) * (c + 1); 
            multiplicationTableArr[r, c] = result; 
            break;
        }//NESTED FOR LOOP ENDS
    }
}

// SEACHFORVALUE METHOD
private void seachForValue()
{
    int r; //ROW
    int c; //COLUMN
    int intSearchNumber;

    txtTable.Clear(); //clear the text box

    intSearchNumber = int.Parse(txtSearchNumber.Text); 

    for (r = 0; r < multiplicationTableArr.GetLength(0); r++)
    {
        for (c = 0; c < multiplicationTableArr.GetLength(1); c++)
        {
            if (intSearchNumber == multiplicationTableArr[r,c])
            {
                txtTable.AppendText(r + ", " + c.ToString());
            }
        }//NESTED FOR LOOP ENDS
    }
}

ありがとうございました。

4

2 に答える 2

1

コードにはいくつかの問題があります。

  1. MultiplicationTable はメソッドである必要があります - 署名なしではコンパイルされません
  2. 内部ループの「ブレーク」を取り除く必要があります。これにより、ループが適切に実行されなくなります。最初のループの後にブレークアウトします。
  3. searchForValue メソッドでは、multiplicationTableArr.GetLength が既に定義されているため、multiTableArr.GetLength ではなく、テーブル ディメンションとして multiTable を使用できます。multiplicationTableArr.GetLength を使用する場合は、必ず 1 を追加してください。そうしないと、最後の行 / 列の手前で停止します。
  4. テーブルにデータを入力するには、実際に MultiplicationTable を呼び出す必要があります。これは、クラス コンストラクターから実行できます。

上記の修正が適用された、コードのコンソール アプリ バージョンを次に示します。

9 を検索すると、出力は次のようになります。

2, 2

コードは次のとおりです。

using System;

namespace MultiplyTest
{
    public class ConsoleTest
    {
        //CONSTANT ARRAY LENGTH
        public const int multiTable = 4;
        //ARRAY
        public int[,] multiplicationTableArr = new int[multiTable, multiTable];  // 4 x 4 table 

        public ConsoleTest()
        {
            MultiplicationTable();
        }

        //MULTIPLICATION METHOD
        private void MultiplicationTable()
        {
            for (int r = 0; r < multiTable; r++)
            {
                //NESTED FOR LOOP
                for (int c = 0; c < multiTable; c++)
                {
                    multiplicationTableArr[r, c] = (r + 1) * (c + 1);
                }//NESTED FOR LOOP ENDS
            }
        }

        // SEACHFORVALUE METHOD
        public string seachForValue(int intSearchNumber)
        {
            var result = string.Empty;

            for (int r = 0; r < multiTable; r++)
            {
                for (int c = 0; c < multiTable; c++)
                {
                    if (intSearchNumber == multiplicationTableArr[r, c])
                    {
                        result = result + r + ", " + c;
                    }
                }//NESTED FOR LOOP ENDS
            }

            return result;
        }
    }

    internal class Program
    {
        public static void Main(string[] args)
        {
            var test = new ConsoleTest();
            Console.WriteLine(test.seachForValue(9));
        }
    }
}
于 2013-11-12T08:52:41.040 に答える