Jump to content
westsajd

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Edited by moe

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...


Aktualności

Artykuły



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.