Mọi người có thể giải thích kĩ hộ mình lệnh return dc ko :-/ Khi mình viết kiểu này
Code:
public static Matrix NewtonRaphson(IEquations hamso, IEquations Jacobi, Matrix X0, int count,double error)
{
Matrix X, Y, F, J;
int i, j, temp, lap;
bool ok = false; //nghiệm thu dc có sai số cho phép
X = X0; //gán các giá trị khởi tạo cho X
Y = new Matrix(0, X.Rows, X.Cols);
for (lap = 0; (lap < count) && (!ok); lap++)
{
F = hamso(X);
J = Jacobi(X);
//hoán đổi các hàng của J để bảo đảm đường chéo khác 0
for (j = 0; j < J.Rows; j++)
{
if (J[j, j] == 0)
{
for (i = 0; (i < J.Rows) && !((J[i, j] != 0) && (J[j, i] != 0)); i++)
;
if (i < J.Rows)
{
for (temp = 0; temp < J.Cols; temp++)
{
J[j, temp] = J[j, temp] - J[i, temp];
J[i, temp] = J[i, temp] + J[j, temp];
J[j, temp] = J[i, temp] - J[j, temp];
F[j, 0] = F[j, 0] - F[i, 0];
F[i, 0] = F[i, 0] + F[j, 0];
F[j, 0] = F[i, 0] - F[j, 0];
}
}
else
{
//System.Windows.Forms.MessageBox.Show("Ma trận J có phần tử trên đường chéo chính = 0");
throw new ArgumentException("Hệ không giải được");
}
}
}
try
{
Y = SolveLinearEquationbyLU(J, (-1) * F);
}
catch
{
throw new ArgumentException("Hệ không giải được");
}
X = X + Y;
ok = Value(Y, error);
}
return X;
}
Ở những chỗ catch, mình thử thay throw bằng return X để hàm trả luôn giá trị X ở lần lặp trước và thoát ra luôn (định như thế), nhưng vẫn ko dc :( Đành phải vất cái throw vào đấy để xử lý bên ngoài.
Mọi người có thể chỉ kĩ cho mình về công dụng của return và cách sử dụng của nó trong C# dc ko, hay là có 1 giải pháp nào khác cho việc này cũng dc
Chứ nhìn đống try catch trong chương trình chính rối quá.