2016-11-07 12 views
1

Imは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 recursion_という悪いケースを持っているようです。 – 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(); 
} 

が出力としてあなたにこれを与える:あなたは2次元配列にそれを保存したい場合は

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を取り除くことができ、交換してください、あなたはそれを単純にこの方法を行うことができますあなたはおそらくにvoidから、あなたのメソッドの戻り値の型を変更したい

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

:このようなコードでConsole.Writeint Sの二次元アレイである210。

私はあなたが将来的にあなたにいくつかのタイピングを節約するだけでヒントとして、それを捨てるつもりだと思うにもかかわらず、あなたの配列がはるかに簡単にすべての10個の要素を入力するよりも初期化することができます。ループは単純な乗算を行うための2つの中で

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だから、戻り値の型のコードを書いたり、素敵な行番号と列番号を書式化したり、2次元配列から直接出力する方法はありません。彼らはまだこれを自分の任務(私が願って)で動作させるために少し仕事があります。 – 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

おそらくStackOverflowの例外を作成し、(CalculateMultTable)を計算するためにその呼び出しで無限ループを作成しています。この関数は、メモリが足りなくなるまで自身を呼び出します。

あなたがその行を削除した場合、それは動作しますが、それは乗算のみの両側が同じであるエントリを作成します。たとえば、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

これは上書きする1次元配列です。 (間違って、もちろん) – 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と1次元配列を初期化.... :それはそのような規則的なパターンを以下の場合は、あなただけのループを使用することができます行番号とCalculateMultTableインデックスの値の。私は、私は他の人に役立つことを願って、次のコード、の思いついた

1

誰もLINQベースのソリューション:)

を述べていないと明らかに私は、1つの私の検索のための任意の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]; 
関連する問題