Java szukanie wartosci w kolumnie

2012-07-02 12:08
Vieckov
0

Dzień dobry,

Mam pewien problem. Piszę program w javie, który pobiera plik .csv i zapisuje go do tablicy dwuwymiarowej. Teraz biorę sobie trzecią kolumnę z tej tabeli, która wygląda tak:

24678
24678
24678
24678
24678
24678
24677
24677
24677
24677
24677
24678
24678
24678
24678
24678
24678
24678
24678
24678
24678
24677
24677
24677
24677
24677
24677
24677
24677
24677
24677
24677
24677

Teraz chcę ją przeszukiwać aż trafię na zmianę wartości i zapisywać tylko tylko te wartości ostatnie przed zmianą. Czyli w tym wypadku wiersz 6, wiersz 11, wiersz 21. Kompletnie nie wiem jak to zrobić. Próbowałem coś w stylu:
for(int i = 0; i < table[3].length; i++)
if (table[1][3] != table[i][3]) {
system.out.println(table[i][3]);
} else {
system.out.println(table[1][3]);

Wiem, że to jest kompletnie źle ale nie mam na to pomysłu jak pobierać ostatnią wartość przed zmianą. Czy stworzyć dwie zmienne i porównywać po kolei czy jak...

Będę wdzięczny za każdą próbę pomocy. Z góry serdecznie dziękuję.

Pozostało 580 znaków

2012-07-02 13:02
Swr
0
for(int i =0; i < table.length; i++)
{
      if(table[i][3] != table[i+1][3])
         System.out.println(table[i][3]);
}

Zadziala jeśli tablica ma przynajmniej rozmiar 2.

Edit:
Poprawione zgodnie z zaleceniami ;)

for(int i =1; i < table.length; i++)
{
      if(table[i-1][3]!= table[i][3])
         System.out.println(table[i-1][3]);
}
edytowany 4x, ostatnio: Swr, 2012-07-02 13:41
Nie zadziała - będzie IndexOutOfBoundsException przy porównywaniu ostatniej komórki z ... yyy zaraz przecież tablica się skończyła... ;] - Antoniossss 2012-07-02 13:10
@Swr Nie wiem co przed chwilą modyfikowałeś, ale może zmienić też indeks tablicy w warunku pętli z 0 na 3 ;P - Antoniossss 2012-07-02 13:42

Pozostało 580 znaków

2012-07-02 13:13
0

a żeby temu zaradzić co w komentarzu:
for powinien być rozpoczęty od i=1
i+1 zmienić na i;
i zmienić na i-1;
i wtedy będzie to jakoś działać - żeby było zabawniej dla dowolnego rozmiaru tablicy
tak więc 2 bugi za jedną zmianą - tablica nie musi mieć minimum rozmiaru 2, i nie spsuje się brzydko pod koniec.


www.toptraker.pl
TopTraker! - I wiesz co jest grane!
Mój własny projekt w Javie - najnowsza wersja już jest!
no w sumie tak ;) za szybko pisalem, za malo sie zastanawialem ;p - Swr 2012-07-02 13:14

Pozostało 580 znaków

2012-07-02 13:22
Vieckov
0

Dziękuję Wam bardzo za odpowiedzi ale Wasze rozwiązanie pokaże mi wszystkie nie pasujące wiersze do pierwszego, a zależy mi na tych, które są ostatnie przed zmianą wartości.

Pozostało 580 znaków

2012-07-02 13:24
0

Nie


www.toptraker.pl
TopTraker! - I wiesz co jest grane!
Mój własny projekt w Javie - najnowsza wersja już jest!

Pozostało 580 znaków

2012-07-02 13:45
Swr
0

Wcześniej za bardzo wziąłem pod uwagę Twój kod: table.length zamiast table[3].length. Jeśli masz tablice table[i][2] to w Twoim wypadku table[3].length zwracałoby wartość 2 zamiast liczbę rekordów czyli i.

Pozostało 580 znaków

2012-07-02 14:11
0

Co by nie było, problem uważam za rozwiązany ;]


www.toptraker.pl
TopTraker! - I wiesz co jest grane!
Mój własny projekt w Javie - najnowsza wersja już jest!

Pozostało 580 znaków

2012-07-02 14:17
Vieckov
0

Zastosowując waszą pętlę wyrzuca mi takie wiersze:

24678
24678
24678
24678
24678
24678
24677
24677
24677
24677
24677
24678

Potrzebuję tylko trzech wierszy czyli
24678
24677
24678

To znaczy ostatnich wierszy przed zmianą wartości wiersza.

Pozostało 580 znaków

2012-07-02 14:18
Vieckov
0

edit: Niestety nie do końca rozwiązany ... :(

jak edit, to na poprzednim poście ;P - Antoniossss 2012-07-02 14:24

Pozostało 580 znaków

2012-07-02 14:23
0

To coś jest nie tak, ale nie z warunkiem pętli tylko z danymi.
Te dane przykładowe na pewno drukowałeś adresując tablice [i][3]?? (System.out.println([i][3])?


www.toptraker.pl
TopTraker! - I wiesz co jest grane!
Mój własny projekt w Javie - najnowsza wersja już jest!

Pozostało 580 znaków

2012-07-02 14:23
Swr
0

Tablica jest typu int czy string?

Jelsi String to if(!table[i-1][3].equals(table[i][3])) (...)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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