przekazanie zmiennej

0

Witam!

Mam pytanko: jak przekazać zmienną (tablice) z jednej klasy do drugiej?

public class WczytajMacierz
{
	WczytajMacierz()
	{	
		try
		{
			BufferedReader we=new BufferedReader(new FileReader("dane.dat"));
			final int ilw = 2;
			final int ilk = 10;
			double dane[][];
			dane = new double[ilw][ilk];
			for (int i=0;i<ilw;i++)
			{
				String we2 = we.readLine();
				StringTokenizer t = new StringTokenizer(we2);
				for (int j=0;j<ilk;j++)
				{
					dane[i][j] = Integer.parseInt(t.nextToken());
					System.out.print(dane[i][j]+" | ");
				}
			}
			we.close();
			Matrix DANE = new Matrix(dane);
			DANE.print(2, 3);
		}
		catch(IOException wyjatek)
		{
			wyjatek.printStackTrace();
		}
	}
}

Teraz potrzebuje DANE</code> w drugiej klasie

Czy konieczne jest zastosowanie dziedziczenia. ( sory za pytanie ale w javie zaczynam)

0

Niezbyt mądrym pomysłem jest tworzenie klasy WczytajMacierz. Klasa powinna odzwierciedlać jakąś rzecz, a nie czynność. W tej klasie zrób pole dane i metodę wczytajMacierz (oraz inne w miarę potrzeb). Jeżeli chcesz przekazać dane do innej klasy, to napisz metodę getDane, która zwraca dane.

0

Niekoniecznie.
Po pierwsze możesz przekazać DANE do innej klasy wywołując jej metodę z parametrem, którym będzie zmienna DANE.
Po drugie. Możesz jeżeli dane są bardziej skomplikowane trzymać je w osobnej klasie, która będzie zarządzała operacjami zapisu/odczytu na tych danych.
Po trzecie jeżeli dane reprezentują jeszcze bardziej złożone struktury np. punkty w krzywej to warto zamiast typów prostych (prymitywów) stworzyć odpowiadające danym klasy.

Kilka uwag technicznych. Wczytywanie danych w konstruktorze klasy zajmującej się tylko wczytywanie danych jest chybionym pomysłem. Znacznie bardziej elegancką metodą jest stworzenie klasy narzędziowej w postaci singletonu lub klasy z metodami statycznymi, która to klasa będzie wczytywała i przekazywała dalej dane:

// wersja z metodą statyczną
public class WczytywanieMacierzyTool{
    public static Matrix wczytajMacierz(File plikMacierzy) throws IOException{
        BufferedReader we=new BufferedReader(new FileReader("dane.dat"));
        final int ilw = 2;
        final int ilk = 10;
        double dane[][];
        dane = new double[ilw][ilk];
        for (int i=0;i<ilw;i++)
        {
            String we2 = we.readLine();
            StringTokenizer t = new StringTokenizer(we2);
                for (int j=0;j<ilk;j++)
                {
                    dane[i][j] = Integer.parseInt(t.nextToken());
                    System.out.print(dane[i][j]+" | ");
                }
         }
         we.close();
         Matrix DANE = new Matrix(dane);
         return DANE;
    }
}

czy jakoś tak... ;)

0

widzę, że przede mną jeszcze długa droga...:)

0

Mam jeszcze pytanko... czy z metody statycznej można pobrać więcej zmiennych, tzn chciałbym wyznaczyć dwa double[][] i wykorzystać w innej klasie do obliczeń, a static przekazuje jedną zmienną...

0

Oczywiście. Metoda statyczna różni się tym od zwykłej metody, że jest dostępna "zawsze i wszędzie" nie ma obostrzeń co do przekazywanych parametrów.

0

To jak to zrobić..:) np na przykładzie powyżej.. (sorry za pytanie ale już chyba próbowałem wszystkiego)

0

Dobra bo ja nie zrozumiałem do końca pytania (2 tydzień pracy 24/7) chciałbyś zwracać z metody dwie zmienne.
Ok... da się, tylko, że zwracasz nie zmienną ale np. listę lub tablicę:

public class WczytywanieMacierzyTool{
    public static java.util.List<Matrix> wczytajMacierz(File plikMacierzy) throws IOException{
       java.util.List<Matrix> macierze = new java.util.LinkedList<Matrix>();
       Matrix m1, m2;// to wypełniamy i chcemy zwrócić
       //kod wypełniający macierze m1 i m2
       macierze.add(m1).add(m2);

       return macierze;
    }
}
0

Dzięki za dotychczasową pomoc...

Mam jeszcze pytanko co do tego wątku... Jak pozbyć się tego, że korzystam z metody statycznej do odczytywania macierzy z pliku. Chodzi mi o to, że w programie muszę stosować try/catch lub throws IOException - nie spowalnia to programu?? Czy każde skorzystanie ze zmiennej przekazywanej przez metodę statyczną powoduje wykonanie zawartego kodu czy tylko przekazanie zmiennej...

0

Doszedłem metodą prób i błędów, że niestety każde wykorzystanie metody statycznej powoduje wielokrotne jej przeliczenie (nie korzysta z wyników).

1 użytkowników online, w tym zalogowanych: 0, gości: 1