• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zliczanie wartości w tablicy

Object Storage Arubacloud
0 głosów
637 wizyt
pytanie zadane 11 maja 2019 w Java przez PeakuDuck Nowicjusz (120 p.)

Witam
Mam problem ze zliczaniem danych w tablicy. Mianowicie przy dwuwymiarowej tablicy muszę dla każdego ostatniego jej elementu w rzędzie policzyć ile jest jego możliwych różnych wystąpień wartości oraz ile razy każda z tych wartości występuję.
Na razie staram się to zrobić na przykładowej małej tablicy sprawdzając czy wszystko się zgadza. Wymyśliłem, że skoro do kolekcji elementy dodawane są bez powtórzeń to łatwo określić samą ich liczbę jako opcji wartości, jednak nie mam pojęcia jakbym mógł jeszcze zliczyć ich ilość dla każdej nich. Jeśli chodzi o try-catch to jest on dlatego że wychodziłem poza tablice przy ostatniej iteracji(do końca też nie rozumiem dlaczego), wiem że jest to bardzo "studenckie" obejście problemu.
(Mam nadzieję, że w miarę zrozumiale opisałem mój problem, dopiero zaczynam a to mój pierwszy post tutaj ;) )

import java.util.HashSet;
import java.util.Set;

public class Main {
	
	
	public static void main(String[] args) {
		
		int zmienna = 0;

		Set<Integer> zbior = new HashSet<Integer>();

		int[][] tab = new int[][] { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 },
				{ 16, 17, 18, 19, 20 }, { 16, 17, 18, 19, 20 }, { 16, 17, 18, 19, 20 }, { 16, 17, 18, 19, 20 },
				{ 16, 17, 18, 19, 20 } };
		System.out.println(tab.length);
		System.out.println("=====");
		try {
			for (int i = 0; i < tab.length; i++) {
				for (int j = 0; j < tab[i].length; j++) {

					zmienna = tab[i][tab[j].length - 1];

					zbior.add(zmienna);

					for (int j2 = 0; j2 < tab.length; j2++) {
						for (int k = 0; k < tab[j2].length; k++) {

							if (zmienna == tab[i][tab[j].length - 1]) {

							} else {

							}
						}
					}
					System.out.println(tab[i][tab[j].length - 1]);

					i++;

				}
				// System.out.println();
			}

		} catch (Exception e) {
			System.out.println("KONIEC");
		}

		for (int lol : zbior) {
			System.out.println(lol);

		}

	}

}

 

1 odpowiedź

0 głosów
odpowiedź 11 maja 2019 przez k222 Nałogowiec (30,150 p.)

Błąd Ci wywala przez linijkę 38:

i++;                //pocopocopocopoco

a co do problemu spróbuj zamienić zbiór na mapę, w której możesz trzymać zależność klucz (ostatnia wartość) -> wartość (ilość wystąpień).

Tak poza tym uprość ten kod, wystarczy jedną pętlą dodać ostatnie wartości do mapy jako klucze (i ustawić wartości na 0 ! ) a drugą przejść po całej strukturze i wywoływać containsKey() albo coś w tym rodzaju dla każdej wartości.

 

Podobne pytania

0 głosów
2 odpowiedzi 328 wizyt
pytanie zadane 26 kwietnia 2020 w C i C++ przez michhal1 Początkujący (270 p.)
0 głosów
1 odpowiedź 720 wizyt
0 głosów
2 odpowiedzi 485 wizyt

92,578 zapytań

141,426 odpowiedzi

319,653 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...