2016-11-07 64 views
1

对于C#(以及一般编程)来说我还是个新手,而且我还是停留在了学校实验室。 一直试图做乘法表1-10,但我得到一个错误,我不明白。C#中的乘法表#

我得到这个使用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]; 
      } 
     } 
    } 
+7

*什么是错误? –

+2

另外,如果你包含了整个函数 - 当你错过了一些右花括号,这会让我怀疑是否还有更多。 –

+2

我的猜测是'StackOverflowException',因为该方法似乎有_infinite递归的错误情况。 – MAV

回答

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 

如果你想的是保存到一个二维数组,你就可以摆脱我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[,],它是ints的二维阵列。尽管我认为你会抛弃它,但是为了帮助您节省一些打印的时间,您的数组可以比输入全部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 
+0

这是一个很好的答案!我希望他试图吸收它,而不是把答案复制到这个作业中。 –

+1

@BrianMacKay这就是为什么我没有发布返回类型的代码,格式化漂亮的行和列号,或者如何直接从2d数组打印。他们仍然有一点点工作,以便让他们在他们的任务中工作(我希望)。 – Cody

+0

谢谢Answear!人们在这里真的很有帮助! :) – Hippimaster

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 
} 
1

你创建这个电话有一个无限循环来计算(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]; 
     } 
    } 
} 
+0

这是一个他覆盖的一维数组。 (当然是错误的) – SteelSoul

+0

@SteelSoul数组是引用类型,所以它可能对他有用,尽管它不是我的文体选择。不想混淆newb超过必要的。 :) –

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索引与行号。

1

谁也没有提到基于LINQ的解决方案:)

而且很显然,我找不到任何谷歌的结果我的搜索这样的一个人,所以我想出了下面的代码,我希望将是对别人有用的以及:

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];