2013-03-16 6 views
1

Я изучаю C# из одной книги, и мне нужно написать код самостоятельно как часть упражнения. Одна из вещей, которые нужно сделать, - передать двойной массив одному из методов перегрузки конструктора, который будет обрабатывать его дальше. Проблема в том, что я не знаю, как это сделать.C# Передача двойного массива методу перегрузки конструктора

Здесь приходит полный код (до сих пор):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace assignment01v01 
{ 

    public class Matrix 
    { 
     int row_matrix; //number of rows for matrix 
     int column_matrix; //number of colums for matrix 
     int[,] matrix; 

     public Matrix() //set matrix size to 0*0 
     { 
      matrix = new int[0, 0]; 
      Console.WriteLine("Contructor which sets matrix size to 0*0 executed.\n"); 
     } 

     public Matrix(int quadratic_size) //create quadratic matrix according to parameters passed to this constructor 
     { 
      row_matrix = column_matrix = quadratic_size; 
      matrix = new int[row_matrix, column_matrix]; 
      Console.WriteLine("Contructor which sets matrix size to quadratic size {0}*{1} executed.\n", row_matrix, column_matrix); 
     } 

     public Matrix(int row, int column) //create n*m matrix according to parameters passed to this constructor 
     { 
      row_matrix = row; 
      column_matrix = column; 
      matrix = new int[row_matrix, column_matrix]; 
      Console.WriteLine("Contructor which sets matrix size {0}*{1} executed.\n", row_matrix, column_matrix); 
     } 

     public Matrix(int [,] double_array) //create n*m matrix and fill it with data passed to this constructor 
     { 
      matrix = double_array; 
      row_matrix = matrix.GetLength(0); 
      column_matrix = matrix.GetLength(1); 
     } 

     public int countRows() 
     { 
      return row_matrix; 
     } 

     public int countColumns() 
     { 
      return column_matrix; 
     } 

     public float readElement(int row, int colummn) 
     { 
      return matrix[row, colummn]; 
     } 
    } 


    class Program 
    { 
     static void Main(string[] args) 
     { 
      Matrix mat01 = new Matrix(); 

      Matrix mat02 = new Matrix(3); 

      Matrix mat03 = new Matrix(2,3); 

      //Here comes the problem, how should I do this? 
      Matrix mat04 = new Matrix ([2,3] {{ 1, 2 }, { 3, 4 }, { 5, 6 }});   

      //int [,] test = new int [2,3] { { 1, 2, 3 }, { 4, 5, 6 } }; 

     } 
    } 
} 

Часть кода, который беспокоит меня помечено «// Здесь возникает проблема, как я должен это делать?».

Любые предложения приветствуются.

ответ

2

Многомерный массив может быть создан следующим образом.

new Matrix(new int[,] {{1, 2, 3,}, {1, 2, 3}}); 

int даже излишним, так что вы можете сделать это еще проще (или, по крайней мере, должно быть легче читать :))

new Matrix(new [,] {{1, 2, 3,}, {1, 2, 3}}); 
+0

проклятых «ты человек» диалог держал меня занят .... что сказал Джаред ... :) PS: да! Я человек! – bas

+0

Ваше решение работает как шарм, спасибо. –

3

Похоже, вы боретесь с тем, как создать многомерный массив с набором начальных значений. Синтаксис для этого является следующее

new [,] {{ 1, 2 }, { 3, 4 }, { 5, 6 }} 

Поскольку вы инициализации массива в этом случае вам не нужно указывать размер или тип. Компилятор выведет его из предоставленных элементов

1

Вы просто индексы перешли, и отсутствует ключевое слово new. Это должно работать:

Matrix mat04 = new Matrix (new [3,2] {{ 1, 2 }, { 3, 4 }, { 5, 6 }}); 

Или, как заметил @JaredPar, вы можете опустить размер массива полностью и иметь компилятор умозаключений для вас:

Matrix mat04 = new Matrix (new [,] {{ 1, 2 }, { 3, 4 }, { 5, 6 }}); 
+0

Да Я выбрал решение с: Matrix mat04 = новая матрица (новая [,] {{1, 2}, {3, 4}, {5, 6}}); –

Смежные вопросы