Witam, mam problem z końcówką kodu. Polecenie brzmi:
Użytkownik wprowadza macierz nx2. Każdy wiersz tej macierzy reprezentuje domknięty przedział liczbowy. Program zwraca macierz, która zawiera maksymalnie połączone przedziały.

Np.
0 5
10 3
20 15
16 19
25 25

Wynik:
0 10
15 20
25 25

Kod:

package project;

import java.util.Scanner;

public class project {

    public static void main(String[] args) {
        int n;
        int m=2;
        System.out.println("Podaj liczbę wierszy macierzy: ");
        Scanner odczyt1 = new Scanner(System.in);
        n = odczyt1.nextInt();
        if (n<=0){
            System.out.println("Błędne dane!");
        }
        else {
            System.out.println("Wymiar macierzy: "+ n+"x"+m);
            }

        int[][] macierz = new int[n][m];
        System.out.println("Podaj elementy tej macierzy: ");
        Scanner odczyt2 = new Scanner(System.in);

        for (int i=0;i<n;i++) {
            for (int j=0;j<m;j++) {
                macierz[i][j] = odczyt2.nextInt();
        }
            }
        System.out.println("Podana macierz: ");
        for (int i=0;i<n;i++) {
            for (int j=0;j<m;j++) {
                System.out.print(macierz[i][j] + " ");
            }
            System.out.println(" ");
        }

        System.out.println(" ");
        System.out.println("Ustawianie przedziałów od najmniejszej liczby do największej: ");
        for (int i=0;i<n;i++){
                if (macierz[i][0]<macierz[i][1]){
                    System.out.print(macierz[i][0] + " " + macierz[i][1]);
                    System.out.println(" ");
                }
                else{
                    System.out.print(macierz[i][1] + " " + macierz[i][0]);
                    System.out.println(" ");
                }
            }
        System.out.println(" ");

        System.out.println("Sprawdzenie zawierania się przedziałów: ");

        for (int i=0;i<n;i++){
                if (macierz[i][0]<macierz[i+1][0]){
                    if (macierz[i][1]>=macierz[i+1][0]&&macierz[i][1]<=macierz[i+1][1]){
                        System.out.print(macierz[i][0]+" "+macierz[i+1][1]);}
                    else if (macierz[i][1]>macierz[i+1][0]&&macierz[i][1]>macierz[i+1][1]){
                        System.out.print(macierz[i][0]+" "+macierz[i][1]);}
                }
                else if( macierz[i][0]>macierz[i+1][0]&&macierz[i][0]>macierz[i+1][1]){
                    System.out.println(" ");}

                else if (macierz[i][0]>macierz[i+1][0]&&macierz[i][0]==macierz[i+1][1]){
                    System.out.print(macierz[i+1][0]+" "+macierz[i][1]);}
                }

    }

        }

Po uruchomieniu programu pojawia się taki błąd:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at projekt8.projekt8.main(projekt8.java:55)

Rozumiem, że program nie może odwołać się do takiego indeksu, ponieważ liczba wierszy macierzy przez wypisywanie tych połączonych przedziałów się zmniejsza. Pytanie, co zrobić, żeby program mi zwrócił macierz z maksymalnymi przedziałami?