Wpis z mikrobloga

To znowu ja i znowu mam problem z C# :-/

Mam funkcję, która w parametrze ma zmienną out typu float [,] (dwuwymiarową tablicę - out float[,] tabRoznic) i potrzebuje wypchnąć tę tablicę na zewnątrz. Problem jest taki, że bez przypisania (określenia rozmiaru), kompilator nie chce mnie puścić (i wcale mu się nie dziwię). Wstawienie tabRoznic = new float[igreki.Length, igreki.Length]; w środku funkcji, to dość głupi pomysł, bo jak pisałem na początku, funkcja wywołuje się sama w sobie (rekurencja). Znacie jakiś sprytny sposób, jak to zrobić?

#programowanie #.net #csharp #kiciochpyta #niewiempocopakujetyletagow #niemamjuzpomyslunatag #nieusunekonta
  • 16
@Yahoo_: Poczytałem i widzę, ze lista działa nieco na zasadzie stosu. Tablica ma czytelną strukturę, a ja potrzebuję dostępu do konkretnych pól (współrzędnych) takiej macierzy (chodzi o wypełnienie Tablicy Różnic Zwykłych przy całkowaniu numerycznym, gdzie wartość o współrzędnych tablicy [i][i] = [i-1][i+1] - [i-1][i]) Na listach pewnie też da się to zrobić, ale nie mam na tyle umiejętności, ani czasu :-/
@Yahoo_: Z tablic korzystam od zawsze, a List właśnie pierwszy raz użyłem. Jeżeli chodzi o odniesienia do współrzędnych, to zachowały się, tak, jak tablice, więc nie jest źle, ale problem "The out parameter 'tabRoznic' must be assigned to before control leaves the current method" pozostał...
@Yahoo_: Problem jest taki, że wywołuję rekurencyjnie tę funkcję. Jeżeli dodam tabRoznic = new List>, to za każdym wywołaniem będzie tworzyło nową zmienną (obecnie wywala przepełnienie stosu-nieskończoną rekurencję). Funkcja wygląda tak

public static void GenerujTablZwykla(float[] igreki, int licznik, int poziom, out List> tabRoznic)

{

tabRoznic = new List>();

//MessageBox.Show("init OK");

if (licznik>poziom)

{

//MessageBox.Show("if OK");

for (int i = licznik; i>poziom; i--)

{

//MessageBox.Show("for OK");

GenerujTablZwykla(igreki, licznik--, poziom, out tabRoznic);

tabRoznic[licznik][i]
@Paulie90: czyli nie powinna być oznaczona jako out. Wywal out i zainicjuj listę prostym new List> () przed wywołaniem funkcji, coś w ten deseń:

var wynik = new List>();

GenerujTablZwykla(igreki, licznik, poziom, wynik);
@Yahoo_: Kaj jo mom łep? Spojrzałem na ten mój wspaniały kod i zaszlochałem.

Rekurencję można zapisać za pomocą dwóch pętli for i zajęło mi to ze 20minut, a kilka godzin siedziałem nad rekurencją...