我是C#的新手(以及一般的编程),我被困在学校实验室。 一直试图制作乘法表1-10,但我得到一个我不明白的错误。
我使用System.Array得到了这个;使用System.Linq;那么我做错了什么?我可能无所事事
static void Calculate(int[] numbers)
{
int[] CalculateMultTable = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Calculate(CalculateMultTable);
{
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] = numbers[i] * numbers[i];
}
}
}
答案 0 :(得分:2)
正如其他答案所指出的那样,您正在进行无限递归调用,并且可能正在获得StackOverflowException
。另外,我无法告诉您对阵列的处理方式。你应该分配吗?是否只是为了帮助循环打印正确的数字?你可以这样做:
for(int i = 1; i <= 10; i++)
{
for(int j = 1; j <= 10; j++)
{
Console.Write((i * j).ToString() + "\t");
}
Console.WriteLine();
}
这将为您提供输出:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
如果要将其保存到2D数组中,可以删除我的Console.WriteLine
,并将Console.Write
替换为如下代码:
int[,] multTable = new int[10,10];
for(int i = 1; i <= 10; i++)
{
for(int j = 1; j <= 10; j++)
{
multTable[i - 1, j - 1] = i * j;
}
}
您可能希望将方法的返回类型从void
更改为int[,]
,这是int
s的二维数组。
尽管我认为你会把它扔掉,但是作为一个提示将来为你节省一些打字的提示,你可以比输入所有10个元素更容易地初始化你的数组。当它遵循这样的常规模式时,您可以使用循环:
int[] x = new int[10];
for(int i = 0; i < 10; i++)
{
x[i] = i + 1;
}
//this will give you the same array.
//Doesn't save any typing for just 10 elements, but saves a ton if you need,
//for example, 100 elements from 1-100
答案 1 :(得分:1)
static void Calculate(int[] numbers)
{
int[] CalculateMultTable = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Calculate(CalculateMultTable);
...
你的代码永远不会工作,这是一个递归循环,没有条件逃脱它 如下更改cose并将起作用:
static void Calculate(int[] numbers)
{
var CalculateMultTable = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (var i = 0; i < numbers.Length; i++)
numbers[i] = numbers[i]*numbers[i];
//Do what you want
}
答案 2 :(得分:1)
您正在使用Calculate(CalculateMultTable)调用创建一个无限循环,可能会创建一个StackOverflow异常。该函数将自行调用,直到内存不足为止。
如果删除该行,它将起作用,但它只会创建乘法两边相同的条目。例如,1 * 1,2 * 2,* 3 * 3等。我希望那是你的意图。
static void Calculate(int[] numbers)
{
int[] CalculateMultTable = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
{
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] = numbers[i] * numbers[i];
}
}
}
答案 3 :(得分:1)
没人提到基于LINQ的解决方案:)
显然我找不到任何google结果来搜索这样的结果,所以我想出了以下代码,我希望这对其他人也有用:
var n = Enumerable.Range(0, 10);
var m = n.Select( n1 => n.Select(n2 => n1 * n2 ).ToArray() ).ToArray();
var result_will_be_10 = m[2][5];
var result_will_be_56 = m[8][7];
var result_will_be_81 = m[9][9];
答案 4 :(得分:0)
int[] CalculateMultTable = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[][] table = new int[10][];
for(int i = 0; i < 10; i ++)
{
table[i] = new int[10];
for (int j = 0; j < 10; j ++)
{
table[i][j] = CalculateMultTable[j] * (i + 1);
}
}
用1,2,3初始化一维数组....
在两个for循环中,只需将CalculateMultTable
索引处的值与行号进行简单相乘。