如果有人能指出我正确的方向,我将非常感激。在过去的几个月里,我一直在使用Murach的C#2013书籍学习C#,这是一本好书,但是在时间上,它缺乏某些细节。我一直在使用Arrays并最终使用多维数组,我编写了一个简单的逻辑,其中声明了多维数组,并使用嵌套的“For Loop”填充为(4x4)乘法表,它按预期工作。问题是我现在试图通过使用嵌套的“For循环”来搜索2d数组中的给定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
}
}
谢谢。
答案 0 :(得分:2)
我不满意的一件事是对行和列使用GetUpperBound(0)
,因为你很幸运,他们都是4.如果你有不同的大小,你的代码会失败。
话虽如此,请使用row
和column
代替r
&amp; c
。
代码看起来应该可行......在txtTable.AppendText...
中放置一个断点,看看你的问题是出现在输出中,还是出现在逻辑中。
编辑:这实际上是上面的答案,我的变量名称和输出更改
不要因为正确答案而赞成它,因为你应该提出上述答案。
编辑易于阅读/更好地使用变量名称,以及更清晰的输出结果:
internal class Program
{
public static void Main(string[] args)
{
var test = new ConsoleTest();
var v = test.seachForValue(12);
Console.WriteLine(v);
Console.ReadLine();
}
}
public class ConsoleTest
{
public ConsoleTest()
{
MultiplicationTable();
}
//CONSTANT ARRAY LENGTH
public const int TableSize = 12;
//ARRAY
public int[,] multiplicationTableArr = new int[TableSize, TableSize];
//MULTIPLICATION METHOD
// this will intialize your array to your multiplication table
private void MultiplicationTable()
{
for (int row = 0; row < TableSize; row++)
{
//NESTED FOR LOOP
for (int column = 0; column < TableSize; column++)
{
multiplicationTableArr[row, column] = (row + 1) * (column + 1);
}//NESTED FOR LOOP ENDS
}
}
// SEACHFORVALUE METHOD
public string seachForValue(int intSearchNumber)
{
var result = new StringBuilder();
for (int row = 0; row < TableSize; row++)
{
for (int col = 0; col < TableSize; col++)
{
if (intSearchNumber == multiplicationTableArr[row, col])
{
result.AppendLine("(" + row + ", " + col + ") -> " + (row + 1) + "*" + (col + 1 )+ "=" + intSearchNumber);
}
}//NESTED FOR LOOP ENDS
}
return result.ToString();
}
}
答案 1 :(得分:1)
代码存在一些问题:
以下是您的代码的控制台应用版本,并对其应用了上述修正。
搜索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));
}
}
}