Wyświetlanie elementów tab 2D

0

mam mały problem z poprawnym wyswietleniem elementów tablicy 2D z użyciem pętli for each.

import java.util.Arrays;

public class Mian {
    public static void main(String[] args) {

        int[] tab2D [] ={{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11, 12, 13, 14, 15}};

        System.out.println(tab2D.length);
        System.out.println(tab2D[0].length);
        System.out.println(tab2D[1].length);
        System.out.println(tab2D[2].length);

        //zwykła pętla

        for (int i = 0; i < tab2D.length; i++) {
            System.out.print("{");
            for (int j = 0; j < tab2D[i].length; j++) {
                if (j != tab2D[i].length - 1)
                    System.out.print(tab2D[i][j] + ", ");
                else
                    System.out.print(tab2D[i][j] + "}");
            }
            System.out.println();
        }

        //pętla for-each

        for (int[] tab : tab2D) {
            System.out.print("{");
            for (int j : tab) {
                if (j != tab.length)
                    System.out.print(j + ", ");
                else
                    System.out.print(j + "}");
            }
            System.out.println();

        }

        int tabela []  ={1,2,3,4,5};

        System.out.print("{");
        for(int element: tabela){
            if(element != tabela.length)
            System.out.print(element +", ");
            else
                System.out.println(element + "}");
        }

    }
}

mają się one tak samo wyświetać jak za pomocą zwykłej pętli

1

For each daje Ci element, a nie indeks elementu.
Także pierwszy tip: if (j != tab.length) w pętli for each jest bez sensu.

W Twoim przypadku (w tablicy znajdują się elementy o różnych wartościach + tablice są niepuste), możesz po prostu sprawdzać, czy j != ostatni element.
Innym sposobem byłaby dodatkowa zmienną, inkrementowana na końcu każdego obrotu pętli, żeby uzyskać indeks obecnego elementu tablicy.

Wypisywanie "}" możesz zrobić nie z ostatnim elementem, tylko po całej zagnieżdżonej pętli.

0
Spine napisał(a):

For each daje Ci element, a nie indeks elementu.
Także pierwszy tip: if (j != tab.length) w pętli for each jest bez sensu.

W Twoim przypadku (w tablicy znajdują się elementy o różnych wartościach + tablice są niepuste), możesz po prostu sprawdzać, czy j != ostatni element.
Innym sposobem byłaby dodatkowa zmienną, inkrementowana na końcu każdego obrotu pętli, żeby uzyskać indeks obecnego elementu tablicy.

Wypisywanie "}" możesz zrobić nie z ostatnim elementem, tylko po całej zagnieżdżonej pętli.

Rzeczywiście, \ niedopatrzyłem. czyli powinno być po prostu

for (int[] tab : tab2D) {
            System.out.print("{");
            for (int j : tab) {
                if (j != tab[tab.length-1])
                    System.out.print(j + ", ");
                else
                    System.out.print(j + "}");
            }
            System.out.println();

        }

Wypisanie "}" po całej zagnieżdzonej pętli chyba raczej nie bardzo tutaj coś usprawni?

Co do zwykłej pętli to np. taki kod nie jest lepszy? z punktu widzenia optymalizacyjnego? Mimo wszystko chyba jest mniej czytelny?

for (int i = 0; i < tab2D.length; i++) {
            System.out.print("{");
            for (int j = 0; j < tab2D[i].length - 1; j++) {
                System.out.print(tab2D[i][j] + ", ");
            }
            System.out.print(tab2D[i][tab2D[i].length - 1] + "}\n");
        }

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