有严重问题使用嵌套循环和2D数组创建乘法表

时间:2015-11-26 04:15:15

标签: c# arrays loops

我被指示创建这个也具有搜索功能的乘法表,但我在创建循环时非常弱,这几乎是我第二次编码数组...最让我困惑的部分是如何编码搜索功能。此外,作业要求使用

  

intTable.GetLength(0)和intTable.GetLength(1)

分别走下去。至于循环的类型,只是说“循环”,那么最好尝试 for-loops 而不是 while循环吗?

这是我(可怕的)代码,我已经搞砸了几天:

    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
            string strSpace; //space

            //Index references begin at zero 
            r = 0;
            while (r < 9)
            { 
                (r = 0; r < intTable.GetLength(0); r++);

                c = 0;
                    while (c < 9)
                    {  
                        (c = 0; c < intTable.GetLength);
                        if (intTable[r, c] < 10)
                            strSpace = "  ";  //two spaces 
                        else
                        strSpace = " ";   //one space   

                       }
                    }
                    //Add 1 to the indexes before multiplying to build multiplication table 
                    //Use intTable.GetLength(0) and intTable.GetLength(1) to control processing
                    intResult = (r + 1) * (c + 1);
                    intTable[r, c] = intResult;
            }
                txtTable.AppendText("\r\n");  //Delete this after implementation

    }
}

        //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

             r = 0;

             while (r < 9)
          {

              c = 0;

             while (c < 9)
            {

            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
            c++;
        }

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

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

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

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

           while  (r = 0; r < intTable.GetLength(0); r++)
           {

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

              if (intSearchNumber == intTable[r, c])
            {


           txtTable.AppendText("\r\n");  

           //In search display all occurences that match the search numbers
        }


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


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

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您似乎对forwhile循环感到有点困惑,将它们的语法混合在一起,并在它们没有的地方添加看似for个循环的内容。存在。

您通常可以使用forwhile循环获得相同的结果。例如,这个while循环:

        int r = 0;
        while (r < 9)
        {
            Console.WriteLine(r);
            r++;
        }

输出与此for循环完全相同的内容:

        for (int r = 0; r < 9; r++)
        {
            Console.WriteLine(r);
        }

for循环看起来有点整洁,但如果您更喜欢while循环,那也很好。它们之间唯一的细微差别是变量rfor循环完成后不存在,这通常被认为是一件好事,因为您可能会意外地使用它。

有时候while循环很有意义,例如在状态发生变化之前继续做某事,在这种情况下,当堆栈变空时:

        Stack<string> s= new Stack<string>(new string[] {"apples", "and", "oranges"});
        while (s.Count > 0)
        {
            Console.WriteLine(s.Pop());
        }

这是第一种方法的清理版本,可能会帮助您更好地理解。你拥有所有的部分,只需要将它们组合在一起并删除冗余和错误的代码:

    private void btnLoadArray_Click(object sender, EventArgs e)
    {
        for (int r = 0; r < intTable.GetLength(0); r++)
        {
            for (int c = 0; c < intTable.GetLength(1); c++)
            {
                int intResult = (r + 1) * (c + 1);
                intTable[r, c] = intResult;
            }
        }
    }