Skocz do zawartości

Zliczanie wartości w tablicy


PeakyDuck

Recommended Posts

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);

		}

	}

}

 

Link do komentarza
Udostępnij na innych stronach

  • 4 years later...

- W tym wypadku zamiast używać try-catch lepiej jest użyć odpowiednich warunków w pętlach.

- W kodzie masz zagnieżdżone pętle, ale nie jest jasne, co chcesz osiągnąć wewnątrz nich.

- Używasz HashSet do przechowywania unikalnych wartości, co jest dobrym pomysłem, ale nie zliczasz wystąpień tych wartości.

Kod z przykładem jak zliczyć unikalne wartości oraz ich wystąpienia:

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        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}
        };

        // Używamy HashMap do przechowywania unikalnych wartości
        Map<Integer, Integer> countMap = new HashMap<>();

        for (int i = 0; i < tab.length; i++) {
            int lastElement = tab[i][tab[i].length - 1];  // ostatni element w rzędzie

            // Zliczanie 
            countMap.put(lastElement, countMap.getOrDefault(lastElement, 0) + 1);
        }

        // Wyświetlenie
        for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            System.out.println("Wartość: " + entry.getKey() + ", Liczba wystąpień: " + entry.getValue());
        }
    }
}

 

tu możesz znaleźć darmowy kurs Javy dla początkujących: https://codeme.pl/blog/java-dla-poczatkujacych

 

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...