我被指示创建这个也具有搜索功能的乘法表,但我在创建循环时非常弱,这几乎是我第二次编码数组...最让我困惑的部分是如何编码搜索功能。此外,作业要求使用
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
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
您似乎对for
和while
循环感到有点困惑,将它们的语法混合在一起,并在它们没有的地方添加看似for
个循环的内容。存在。
您通常可以使用for
或while
循环获得相同的结果。例如,这个while
循环:
int r = 0;
while (r < 9)
{
Console.WriteLine(r);
r++;
}
输出与此for
循环完全相同的内容:
for (int r = 0; r < 9; r++)
{
Console.WriteLine(r);
}
for
循环看起来有点整洁,但如果您更喜欢while
循环,那也很好。它们之间唯一的细微差别是变量r
在for
循环完成后不存在,这通常被认为是一件好事,因为您可能会意外地使用它。
有时候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;
}
}
}