2016-11-07 66 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];