westsajd Opublikowano 19 Marca 2011 Zgłoś Opublikowano 19 Marca 2011 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; } }} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
moe Opublikowano 19 Marca 2011 Zgłoś Opublikowano 19 Marca 2011 (edytowane) 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 19 Marca 2011 przez moe Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...