【问题标题】:Issues when loading, displaying and searching multiplication table that uses nested-loops and 2D array加载、显示和搜索使用嵌套循环和二维数组的乘法表时出现问题
【发布时间】:2015-11-27 01:49:41
【问题描述】:

我被指示创建一个使用嵌套循环和 2D 数组的乘法表,并且已经为此工作了好几天。该表有 3 个功能:加载数组、显示数组和搜索数组。我对循环没有经验,但我想我完成了那部分。然而,虽然没有显示错误,但当我调试/运行程序时,“加载数组”按钮什么也不做,“显示数组”按钮显示9个数字顶部,然后出现“超出范围”异常;当我单击“搜索数组”时,它仅在我输入“0”时才有效......它应该在数组中搜索所有出现的数字作为文本框中的搜索条件.我认为添加 try-catch 块可能会有所帮助,但不确定如何解决其他问题...

这是我的代码:

    namespace CS12c
{
    public partial class frmCS12c : Form
    {

        int [ , ] intTable = new int[9,9];  // 9 x 9 table 

        public frmCS12c()
        {
            InitializeComponent();
        }

        private void btnLoadArray_Click(object sender, EventArgs e)
        {
            int r; //row
            int c; //column
            int intResult; //result

            //Index references begin at zero 
             for (r = 0; r < intTable.GetLength(0); r++)    //Use intTable.GetLength(0) and intTable.GetLength(1) to control processing
            {

               for (c = 0; c < intTable.GetLength(1); c++) //Add 1 to the indexes before multiplying to build multiplication table 
              {
                intResult = (r + 1) * (c + 1);
                intTable[r, c] = intResult;
               }
                txtTable.AppendText("\r\n"); 
          }
      }

        //Modify the nested for loops used above to nested while loops
        private void btnDisplayArray_Click(object sender, EventArgs e)
        {
            int r; //row
            int c; //column
            string strSpace;

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

            for (r = 0; r < 9; r++)
            {

                for (c = 0; c < 9; r++)
                {

                    if (intTable[r, c] < 10)
                        strSpace = "  ";  //two spaces 
                    else
                        strSpace = " ";   //one space

                    txtTable.AppendText(strSpace); // insert space
                    txtTable.AppendText(intTable[r, c].ToString());  //insert result

                }
                    txtTable.AppendText("\r\n");  //Move down one line

            }
        }
        private void btnSearchArray_Click(object sender, EventArgs e)
        {
            int r; //row
            int c; //column
            int intSearchNumber; //Search number

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

            //Not enclosed in a try-catch; make you enter a number in textbox
            intSearchNumber = int.Parse(txtSearchNumber.Text);

            //In search display all occurences that match the search numbers
            for (r = 0; r < intTable.GetLength(0); r++)
            {

                for (c = 0; c < intTable.GetLength(1); c++)
                {

                    if (intSearchNumber == intTable[r, c])
                        txtTable.AppendText(intTable[r, c].ToString() + " is located in " + r + ", " + c);
                }
                        txtTable.AppendText("\r\n");

            }
        }


        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }//end of form
}//end of namespace

任何可以提供帮助的人都会真正成为救生员,谢谢...

【问题讨论】:

  • 负载“什么都不做”是什么意思。你期待它做什么?它填充数组并添加一些换行符。
  • 添加Try{/*Your code inside btnSearchArray_Click here*/}catch(Exception ex){MessageBox.Show(string.Format("r: {0},c: {1}",r.ToString(),c.ToString()))}
  • @Pau808 添加Try...Catch... 就可以知道是哪个索引出错了。
  • 别这样,这不是异常处理的目的。
  • 是的...但是你应该在调试后删除它...也请使用断点..

标签: c# arrays loops


【解决方案1】:

“加载数组”按钮什么都不做

事实上btnLoadArray_Click 方法做了一些事情——填充intTable 数组。它在视觉上没有做任何有用的事情,所以如果它需要显示一些东西,你必须为此编写一些代码。

“显示数组”按钮顶部显示9个数字,然后出现“超出范围”异常

在您的 btnDisplayArray_Click 处理程序中,以下行有一个错误

for (c = 0; c < 9; r++)

注意到r++了吗?改成c++,问题就解决了。

当我单击“搜索数组”时,它仅在我输入“0”时才有效...它应该在数组中搜索所有出现的作为文本框中输入的搜索条件的数字。

我在btnSearchArray_Click 方法中没有发现任何问题,它按预期工作。

实际上,如果您没有将btnLoadArray_Click 方法附加到相应的按钮Click 事件,则问题#1 和#3 可能相关。打开您的表单 Designer.cs 并确保有一行类似于

this.btnLoadArray.Click += new System.EventHandler(this.btnLoadArray_Click);

【讨论】:

  • 非常感谢!我不敢相信我没有注意到 r++ 而不是 c++!将在未来防止此类错误,现在它工作得更好 - 再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2023-04-01
  • 2015-10-02
  • 1970-01-01
相关资源
最近更新 更多