C#中的乘法表

时间:2016-11-07 18:56:45

标签: c#

我是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];
            }
        }
    }

5 个答案:

答案 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索引处的值与行号进行简单相乘。