c++ i java - co to znaczy, jak to zamienić

0

Mam pewien całkiem prosty algorytm w c++, który staram się przerobić na jave i trochę udoskonalić. I właśnie odkryłam, że w składni c++ są niuanse mi całkowicie nieznane. Dlatego pierwsze o co chciałam spytać to co znaczy konstrukcja:

(a->b == 1 )

Chodzi mi głównie o to '->'. Wujek google nie znalazł mi odpowiedzi, a ja albo mam zaćmienie, albo pierwszy raz się z czymś takim spotykam...

0

Dobra, znalazłam w końcu, że jest to operator wyłuskania, rodzaj wskaźnika. Wskaźników w javie się nie stosuje - czy da się więc to jakoś zamienić?

Chodzi mi konkretnie o takie dwie linie kodu z c++ na jave (bo dalej już sobie dam radę):

  for(list<edge>::iterator i = L[v].begin(); i != L[v].end(); i++)
       if(i->v == 1)

Dodam, że edge to pewna klasa, a L to lista. Z tym iteratorem też mam pewien problem ;/

0

Chyba chodzi o to. że:
"Czy A i B jest równe 1?"

0

Niestety, Dr, wtedy to by było po prostu (a&&b == 1)

0

To oznacza, czy pole b w obiekie a równe jest 1:

class Klasa {
  public:
    int b;
};
...
Klasa *a = new Klasa;
...
(a->b == 1)

Poczytaj o klasach w C++, to Ci się może nieco rozjaśni :)

// edit:
Taki kawałek kodu w C++:

 for(list<edge>::iterator i = L[v].begin(); i != L[v].end(); i++)
       if(i->v == 1)

w Javie będzie wyglądał mniej więcej tak, przyjmując, że L[v] implementuje interfejs List:

 for(edge i : L[v])
   if(i.v == 1)
0

kubARek, myślę, że teraz już rozumiem i chyba będę wiedziała jak to rozwiązać :) Tylko nadal nie wiem za bardzo jak ogarnąć w tej sytuacji mój iterator, a bez tego nie ruszę - może ktoś ma pomysł?

Wredna pętla for each :P Nie ogarniam jej, ale doczytam ;)
Ciągle mi podkreśla, że jest błąd. Kompilator twierdzi, że do takiej składki L[v] to powinna być tablica, a ja mam listę i mu to nie pasuje.
Może źle listę stworzyłam? Wygląda u mnie tak:

List<KrawedzWaga> L = new ArrayList<KrawedzWaga>();

Najpewniej tu jest gdzieś błąd, bo dopiero próbuję ogarnąć obiektowe i listy ;)

0

Czy L w C++ to na pewno list? list nie ma zdefiniowanego operator[], a masz tam L[v].
W Javie zamiast L[v] użyj L.get(v), poza tym, L musi być listą list (List<List<edge>>), zgodnie z przykładem w C++.

for (edge i : L.get(v)) {  /* ... */  }
0

W moim przykładzie z c++ L wygląda tak:
list <edge> L[MAXV + 1];
Ale nie muszę w javie mieć dokładnie tego samego, ważne by chodziło...

0

Więc zrób coś takiego:

List<List<Edge>> L = new ArrayList<>(MAXV + 1);

// wypełnianie:
List<Edge> edges = new LinkedList<Edge>();
edges.add(new Edge(...));
edges.add(new Edge(...));
L.add(edges);

int v = 0;
for (Edge i : L.get(v)) {
    ...
}

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