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

spoj, TRN - Transpozycja Macierzy

Object Storage Arubacloud
0 głosów
284 wizyt
pytanie zadane 15 lipca 2022 w Java przez Ada3141592654 Początkujący (270 p.)

Hej,

Napisałam kod, który ma na celu transponowanie macierzy. Problem polega na tym, że jeżeli mam na przykład macierz wejściową o czterech wierszach i trzech kolumnach, to ta wyjściowa ma tylko trzy wiersze i trzy kolumny, czwarty wiersz z macierzy pierwotnej nie pojawia się jako czwarta kolumna w macierzy po transpozycji. Poproszę o jakąś wskazówkę, co powinnam poprawić. 

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] array = new int[n][m];
        int[][] newArray = new int[m][n];
        for(int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                array[i][j] = scanner.nextInt();
            }
            System.out.println("");
        }
        System.out.println("");
        for(int j = 0; j<n; j++) {
            for(int i = 0; i<m; i++) {
                newArray[j][i] = array[i][j];
                System.out.print(newArray[j][i] + " ");
            }
            System.out.println(" ");
        }
    }

 

2 odpowiedzi

0 głosów
odpowiedź 15 lipca 2022 przez jankustosz1 Nałogowiec (35,880 p.)
Nie potrzebujesz tablicy newArray, możesz wypisywać wyniki bez niej.

A nie działa bo namieszałeś z indeksami, array jest n na m, a odwojujesz się po i, j czyli tak jakby była m na n
komentarz 15 lipca 2022 przez Wiciorny Ekspert (269,590 p.)
nie moze, bo jesli transponowana tablica nie jest kwadratowa a prostokatna to wiersze zamienia sie dlugoscia z kolumnami, na tym polega transpozycja.

Jesli ma tylko wypisac dane, to okej, zgoda - mozna wypisywac na bierzaco po warunkach, gorzej jesli ma zapis przechowac wtedy musi utworzyc nowa
komentarz 15 lipca 2022 przez jankustosz1 Nałogowiec (35,880 p.)
W sensie czego nie może? No chyba o to chodzi żeby zamienić ilość kolumn z ilością wierszy.

W tym momencie dziwne że wogóle nie ma jakiegoś runtime exception bo wychodzi poza zakres tablicy
komentarz 15 lipca 2022 przez Ada3141592654 Początkujący (270 p.)

@Wiciorny,
poprawiłam ten kod, zwraca poprawny wynik, ale spoj mi go nie przyjmuje. Co może być przyczyną? 

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        System.out.println(n + " " + m);
        int[][] array = new int[n][m];
        int[][] newArray = new int[m][n];
        for(int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                array[i][j] = scanner.nextInt();
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println("");
        for(int j = 0; j<m; j++) {
            for(int i = 0; i<n; i++) {
                newArray[j][i] = array[i][j];
                System.out.print(newArray[j][i] + " ");
            }
            System.out.println();
        }
    }

 

komentarz 16 lipca 2022 przez Wiciorny Ekspert (269,590 p.)
zwróć uwagę na odp.
0 głosów
odpowiedź 15 lipca 2022 przez Wiciorny Ekspert (269,590 p.)

Przy okazji pytania, zadanie może nie przejść przez Scanner- działa za wolno, zamień scanner na 
BufferReader np.
 

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  String[] tab;
  
   tab =  br.readLine().split(" ");
   int ileWierszy = Integer.parseInt(tab[0]);
   int ileKolumn = Integer.parseInt(tab[1]);

   
    String[][] tab1=new String[ileWierszy][ileKolumn];
    
    for(int i=0; i<ileWierszy; i++) {
       tab =  br.readLine().split(" ");
       for(int i1=0; i1<ileKolumn; i1++) {
         tab1[i][i1] = tab[i1]; 
       }
    }

 

Podobne pytania

0 głosów
3 odpowiedzi 873 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez J0ker Pasjonat (15,400 p.)
0 głosów
1 odpowiedź 408 wizyt
pytanie zadane 28 listopada 2021 w Java przez xTMx3 Obywatel (1,560 p.)
+1 głos
1 odpowiedź 126 wizyt
pytanie zadane 4 września 2022 w Java przez Aragedens Obywatel (1,120 p.)

92,536 zapytań

141,377 odpowiedzi

319,454 komentarzy

61,922 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!

...