2016-01-21 50 views
3

該程序生成隨機二維數組並計算每行中的最大值。我確實有正確的結果,但如果列數不等於行數,則彈出IndexOutOfRangeExceptionC#System.IndexOutOfRangeException但程序正在運行

Random r = new Random(); 

int x,y; 

Console.WriteLine("lines"); 
x = int.Parse(Console.ReadLine()); 

Console.WriteLine("columns"); 
y = int.Parse(Console.ReadLine()); 

if ((x < 1) || (y < 1)) 
{ 
    Console.WriteLine("Error"); 
    Console.ReadLine(); 
} 
else 
{ 
    int[,] array1 = new int[x, y]; 

    int[] array2 = new int[y]; 

    for (int i = 0; i < x; i++) 
    { 
     for (int j = 0; j < y; j++) 
     { 
      array1[i, j] = r.Next(0, 51); 
      Console.Write(array1[i, j] + " "); 

     } 
     Console.WriteLine(); 
    } 

    for (int j = 0; j < y; j++) 
    { 
     int max = array1[j, 0]; 

     for (int i = 1; i < x; i++) 
     { 
      if (array1[j, i] > max) 
      { 
       max = (array1[j, i]); 
      } 
      else 
      { 

      } 
     } 
     array2[j] = max; 
     Console.WriteLine(); 
     Console.Write(array2[j]); 
    } 

    Console.ReadLine(); 
} 
+2

哪一行拋出異常?你想要做什麼? – David

回答

5

關於你的第二次通過的數據(一個你去哪裏首先而不是列線),這樣的:

if (array1[j, i] > max) 
{ 
    max = (array1[j, i]); 
} 

應該是這樣的:

if (array1[i, j] > max) 
{ 
    max = (array1[i, j]); 
} 

更改處理行和列的順序不會更改數組的維數。

編輯:每@ csharpfolk的評論,這條線還需要固定:

int max = array1[j, 0]; 

可能是:

int max = array1[0, j]; 
+1

行'int max = array1 [j,0];'也應該修正 – csharpfolk

相關問題