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

Macierze - wiersze to przedziały liczbowe

Object Storage Arubacloud
0 głosów
185 wizyt
pytanie zadane 3 stycznia 2019 w Java przez marrez Nowicjusz (120 p.)

Dzień dobry, 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?

1 odpowiedź

0 głosów
odpowiedź 3 stycznia 2019 przez RafalS VIP (122,820 p.)

Nie trzeba było długo szukac:

int[][] macierz = new int[n][m];
...
for (int i=0;i<n;i++){
...
macierz[i+1]

Iteruj do n-1.

Podobne pytania

0 głosów
1 odpowiedź 517 wizyt
0 głosów
0 odpowiedzi 143 wizyt
pytanie zadane 19 kwietnia 2021 w Rozwój zawodowy, nauka, praca przez gorgonkowa Obywatel (1,810 p.)
0 głosów
1 odpowiedź 305 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 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!

...