Skocz do zawartości
westsajd

[C#] dodawanie macierzy, exception, gdzie dać try?

Rekomendowane odpowiedzi

Witam, mam sobie taki prosty programik dodający 2 macierze, wszystko działa jednak chciałbym żeby mi ładnie wyłapywał wyjątki. Nie do końca wiem gdzie w tym programie dać try { } żeby potem wyłapać to poprzez catch { }. Jakieś podpowiedzi? :)

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            int k, l, m, n;            Random rnd = new Random();            Console.WriteLine("Podaj wymiary tablicy A: ");            Console.Write("m = ");            k = Convert.ToInt32(Console.ReadLine());            Console.Write("n = ");            l = Convert.ToInt32(Console.ReadLine());            double[,] m1 = new double[k, l];            Console.WriteLine("\nPodaj wymiary tablicy B ");            Console.Write("m = ");            m = Convert.ToInt32(Console.ReadLine());            Console.Write("n = ");            n = Convert.ToInt32(Console.ReadLine());            double[,] m2 = new double[m, n];            Console.WriteLine("\nTablica A:");            for (int i = 0; i < m1.GetLength(0); i++)            {                for (int j = 0; j < m1.GetLength(1); j++)                {                    m1[i, j] = rnd.NextDouble();                    Console.Write("{0:N2} ", m1[i, j]);                }                Console.WriteLine();            }            Console.WriteLine("\nTablica B:");            for (int i = 0; i < m2.GetLength(0); i++)            {                for (int j = 0; j < m2.GetLength(1); j++)                {                    m2[i, j] = rnd.NextDouble();                    Console.Write("{0:N2} ", m2[i, j]);                }                Console.WriteLine();            }            Console.WriteLine("\nTablica A+B:");            for (int i = 0; i < m1.GetLength(0); i++)            {                for (int j = 0; j < m1.GetLength(1); j++)                {                    Console.Write("{0:N2} ", dodawanie(m1, m2)[i, j]);                }                Console.WriteLine();            }            Console.ReadLine();        }        static double[,] dodawanie(double[,] a, double[,] b)        {            double[,] c = new double[a.GetLength(0), a.GetLength(1)];            if ((a.GetLength(0) != b.GetLength(0)) || (a.GetLength(1) != b.GetLength(1)))            {                throw new IndexOutOfRangeException("Macierze maja rozne wymiary!");            }            for (int i = 0; i < c.GetLength(0); i++)            {                for (int j = 0; j < c.GetLength(1); j++)                {                    c[i, j] = a[i, j] + b[i, j];                }            }            return c;        }    }}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie chce mi sie analizować ale na szybko moje poprawki:

1. przed każdym odczytem z konsoli nigdy nie konwertuj do typu - ktoś wpisze 'asd' i już masz exception - zadeklaruj wartość ręcznie i sparsuj na nią - np

 

 

-- pisze z palca

 

int i =0;if( int.TryParse(Console.ReadLine().ToString(), out i)){...}

2. jeżeli w dodawanie wyrzucasz exception to przed każdym jej wywołanie musi być try/catch ew finally - inaczej nie ma sensu wyrzucania exception.

 

Zasadniczo jak np logujesz do event viewera to na twoim miejscu podzieliłbym wszystkie fory na mniejsze funkcje i je otoczył try/catch - wtedy będziesz wiedział gdzie się wysypało/co i przyczynę - jak walniesz na cały main to nie wyłapiesz gdzie masz błąd

 

E: jeszcze na szybko - nie deklaruj nullowych zmiennych - lepiej jest przypisać wartość 0 i gdzieś w dalszej logice traktować je jak null gdy jest 0

Edytowane przez moe

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...