Tablica nie wyświetla obiektów.

Tablica nie wyświetla obiektów.
Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Witam. Mam problem z wyświetleniem obiektów tablicy. Posiadam 2 klasy, które zawierają tablicę obiektów typu IDevices oraz obiekty, które używają tego interfejsu. Jeden obiekt wrzucam do jednej tablicy, drugi do drugiej. Niestety po wyświetleniu widać obiekt tylko z jednej z tablic. Nie wiem w czym jest problem. Mój kod:

Kopiuj
public class ROpole implements IDevices {
private static ROpole rOpole = ROpole.getROpoleInstance();
	private static RGdańsk rGdańsk = RGdańsk.getRGdańskInstance();
private IDevices [] connectedWith = {rGdańsk, null};
...
public static ROpole getROpoleInstance() {
		if(rOpole == null)
			rOpole = new ROpole();
		return rOpole;
	}
...
}
Kopiuj
public class RGdańsk implements IDevices {
private static ROpole rOpole = ROpole.getROpoleInstance();
	private static RGdańsk rGdańsk = RGdańsk.getRGdańskInstance();
private IDevices [] connectedWith = {rOpole, null, null};
...
public static RGdańsk getRGdańskInstance() {
		if(rGdańsk == null)
			rGdańsk = new RGdańsk();
		return rGdańsk;
	}
...
}

Funkcja odpowiedzialna za wyświetlanie obiektów:

Kopiuj
public String getInfoAboutDevice() {
        String informationsAboutDevice = "";
    
        informationsAboutDevice += "Connected with: ";
		
        for(int count = 0; count < interfaces.length; count++) {
		if(count == interfaces.length - 1) informationsAboutDevice += connectedWith[count] + ".";
		else informationsAboutDevice += connectedWith[count] + ", ";
	}

        return informationsAboutDevice;
}    

Interfejs IDevices:

Kopiuj
public interface IDevices {
	public void setMode(IModes mode);
	public IModes getMode();
	public void setPrompt(String prompt);
	public String getPrompt();
	public void setHostname(String hostname);
	public String getHostname();
	public void setDevice(IDevices device);
	public IDevices getDevice();
	public String getInfoAboutDevice();
	public void getInterfaces();
	public void setIpAddress(String ipAddress, int numberOfInterface);
	public void setIpMask(String ipMask, int numberOfInterface);
	public void openInterface(int numberOfInterface);
	public String getStatus(int numberOfInterface);
	public IDevices getConnectedWith(int numberOfInterface);
	public void setProtocol(int numberOfInterface);
	public int getNumberOfInterfaces();
	public String getIpAddress(int count);
}
edytowany 2x, ostatnio: qwerty890
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Cud, że cokolwiek się wyświetla. Zamieszczony kod nie zawiera żadnej instrukcji wyświetlającej.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

A gdzie kod wyświetlający?

Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Właśnie dodałem go na początek tematu.

krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

Jeszcze nie wiemy co zawiera

Kopiuj
interfaces
Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Już dodałem kod interfejsu.

SW
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:426
0

pewnie do pętli nie wchodzi,
albo nie zaimplementowałeś tej metody w drugiej klasie?

edytowany 1x, ostatnio: Swr
krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

Chodziło mi o to, że w metodzie wyświetlającej używasz jakiegoś pola-tablicy o nazwie "interfaces". Nie wiadomo co ona zawiera lub jak jest wypełniana.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Kod interfejsu jest mało przydatny. Jak tworzysz pole interfaces?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Sorki, zapomniałem tego wstawić.** interfaces** to tablica przechowująca interfejsy routera. Ma taką samą wielkość jak tablica connctedWith.

Kopiuj
private String [] interfaces = {"fa0/0", "fa0/1", "fa0/2"};
edytowany 1x, ostatnio: qwerty890
krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

connectedWith w ROpole ma length == 2

Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Tak, ale tam ilość interfejsów też jest równa 2. Tablica interfaces w klasie ROpole:

Kopiuj
private String [] interfaces = {"fa0/0", "fa0/1"};

Tablicę interfaces z RGdańsk wkleiłem wcześniej.

krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

Ogólnie nie powinieneś zakładać że te tablice są równej wielkości. Skoro wyświetlasz devices, to powinieneś się odnieść tylko do tej tabeli.

Co dokładnie wyświetla Ci funkcja dla ROpole i RGdansk?

Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Dokładnie powinna wyświetlać mi adresy obiektów w tablicy. Wyniki, jakie ja otrzymuję:
Klasa RGdańsk: Connected with: Model.ROpole@677327b6, null, null.
Klasa ROpole: Connected with: null, null.

Program w ogóle nie wyświetla obiektów tablicy connectedWith klasy ROpole i tylko pierwszy obiekt w klasie RGdańsk.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

W metodzie getInfoAboutDevice wyświetlasz tylko jedną tablicę connectedWith, trudno się zorientować którą bo nie napisałeś w jakiej klasie jest metoda getInfoAboutDevice.
Odpowiadanie na Twoje pytanie przypomina wróżenie z fusów. Strasznie skąpisz informacje.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Ogólnie cały projekt wygląda tak, że ustawiam raz obiekt rOpole, a raz rGdańsk na ten, którego używam. Metoda getInfoAboutDevice wyświetla informacje o aktywnym obiekcie. Ogólnie działa tak jak powinna, problem jest tylko z tym, że inicjuję tablicę connectedWith obiektami, których potem nie widać.

SM
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Odpal debugera i zobacz co się dzieje.

krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

Ogólnie to tam jest pewne zapętlenie. Tworzysz 2 klasy naraz i w obu wywołujesz nawzajem funkcje statyczne które dodatkowo inicjują pola. Spróbuj dla testów zrobic tak:

Kopiuj
public class ROpole implements IDevices {
private static ROpole rOpole;
private IDevices [] connectedWith = {RGdańsk.getRGdańskInstance(), null};
...
public static ROpole getROpoleInstance() {
        if(rOpole == null)
            rOpole = new ROpole();
        return rOpole;
    }
...
}


public class RGdańsk implements IDevices {
    private static RGdańsk rGdańsk;
private IDevices [] connectedWith = {ROpole.getROpoleInstance(), null, null};
...
public static RGdańsk getRGdańskInstance() {
        if(rGdańsk == null)
            rGdańsk = new RGdańsk();
        return rGdańsk;
    }
...
}
Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

W klasie RGdańsk Eclipse wyświetlił błąd: A Java Exception has occured. Konsola wyświetliła:
Exception in thread "main" java.lang.StackOverflowError
at Model.RGdańsk.getRGdańskInstance(RGdańsk.java:22)
at Model.ROpole.<init>(ROpole.java:14)

Linia 22 to kod w metodzie Singletonu:
rGdańsk = new RGdańsk();

Linia 14 to kod tablicy:
private IDevices [] connectedWith = {ROpole.getROpoleInstance(), null, null};

edytowany 4x, ostatnio: qwerty890
krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

@Edit
Dobra, to co ja podałem też się zapętla. Jedyne wyjście jakie widzę to leniwa inicjalizacja connectedWith. Chociaż dużo lepszym wyjściem byłby refaktor kodu do obiektowego, bo tutaj operujesz bezpośrednio na klasach z jakiegoś powodu.

edytowany 1x, ostatnio: krzysiek050
Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

at Model.RGdańsk.getRGdańskInstance(RGdańsk.java:22)
at Model.ROpole.<init>(ROpole.java:14)

to się powtarza chyba z 50 razy. Reszta - tak jak napisałem.

Q8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Poprawiłem ten błąd. Teraz mam taki błąd, że mam dwie instancje w każdej z klas: rOpole i rGdańsk. Obydwie są instancjami Singletonów tychże klas. Kiedy zainicjuję obiekt tylko w klasie ROpole, program go wyświetla. Jeżeli natomiast zainicjuję odpowiednie obiekty w obydwu klasach, to program wyświetla tylko obiekt w klasie RGdańsk. Ogólnie wygląda to tak:

Kopiuj
public class ROpole implements IDevices {
    private static IDevices rOpole;
    private static IDevices rGdańsk = RGdańsk.getRGdańskInstance();
    private IDevices [] connectedWith = {rGdańsk, null};
}
Kopiuj
public class RGdańsk implements IDevices {
    private static IDevices rGdańsk;
    private static IDevices rOpole = ROpole.getROpoleInstance();
    private IDevices [] connectedWith = {rOpole, null, null};
}
edytowany 1x, ostatnio: qwerty890
krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
0

Bo inicjowanie tych klas się zapętla. Spróbuj udawać interpreter kodu i wczytaj te 2 klasy.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)