加载,显示和搜索使用嵌套循环和2D数组的乘法表时出现的问题

时间:2015-11-27 01:49:42

标签: c# arrays loops

我被指示创建一个使用嵌套循环和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

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

1 个答案:

答案 0 :(得分:1)

  

“加载数组”按钮不执行任何操作

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

  

“display array”按钮在顶部显示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);