Takich tematów było sporo. Ale nie spotkałem takiego, który nie polegałby na zamianie wyświetlanych kolumn z wierszami, a mi zależałoby na znalezieniu rozwiązania, jak faktycznie przekopiować wartości z komórki [0][1] do komórki [1][0], jak i pozostałe wartości. Wiem, że będę musiał wykorzystać zmienną pomocniczą temp, ale problemem jest tu nierówna liczba wierszy i kolumn (macierz prostokątna).
Jak to zrobić?
"Zauważyłem" też, że elementy leżące na głównej przekątnej (w macierzy kwadratowej), zostają na tym samym miejscu, a pozostałe elementy leżące po obu stronach przekątnej zamieniają się wzajemnie wartościami. Tylko że w przypadku macierzy niekwadratowej trudno tu mówić o jakiejś przekątnej...

- Rejestracja:ponad 6 lat
- Ostatnio:ponad 4 lata
- Postów:30

- Rejestracja:ponad 6 lat
- Ostatnio:ponad 4 lata
- Postów:30
enedil napisał(a):
Jak trzymasz w pamięci macierze?
Generuję losowo wartości macierzy, a rozmiar podaję w mainie i przekazuję jako konstruktor do metody.

- Rejestracja:ponad 6 lat
- Ostatnio:ponad 4 lata
- Postów:30
enedil napisał(a):
Pokaż kod, bo niestety nie powiedziałeś o tym co jest tutaj istotne.
import java.util.Arrays;
import java.util.Random;
public class tablica2 {
int [][] tab;
public tablica2(int w, int k, int z){
tab = new int [w][k];
for (int i = 0; i<tab.length; i++) {
for (int j = 0; j<tab[i].length; j++) {
Random r = new Random();
tab[i][j] = r.nextInt(z);
}
}
}
public void WyswietlWierszami() {
for (int i = 0; i<tab.length; i++) {
for (int j = 0; j<tab[i].length; j++) {
System.out.print(tab[i][j] + ", ");
}
System.out.println();
}
}
public void WyswietlKolumnami() {
for (int i = 0; i<tab[0].length; i++) {
for (int j = 0; j<tab.length; j++) {
System.out.print(tab[j][i] + ", ");
}
System.out.println();
}
}
public static void main (String[] args){
tablica2 tab1 = new tablica2(1, 5, 9);
System.out.println("Wyswietlam wierszami");
tab1.WyswietlWierszami();
System.out.println("Wyswietlam kolumnami");
tab1.WyswietlKolumnami();
}
}
Coś takiego...

- Rejestracja:około 8 lat
- Ostatnio:4 minuty
- Postów:4883
Yhm. Czyli Masz macierz, jako dwuwymiarową tablicę typu int
. Rozwiń zdanie: "jak faktycznie przekopiować wartości z komórki [0][1] do komórki [1][0], jak i pozostałe wartości". Chodzi o przekopiowanie do drugiej macierzy i zwrócenie rezultatu? To nie będzie trudne:
int[][] transpose_matrix(int [][] matrix){
int[][] temp = new int[matrix[0].length][matrix.length];
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[0].length; j++)
temp[j][i] = matrix[i][j];
return temp;
}

- Rejestracja:ponad 6 lat
- Ostatnio:ponad 4 lata
- Postów:30
Dzięki.
Pozostając jeszcze w temacie macierzy, mam takie polecenie do zadania, którego kompletnie nie rozumiem:
Zdefiniuj klasę MacierzTab traktując macierz jako jednowymiarową tablicę obiektów typu Tablica ( dla uproszczenia zapisu przyjmij, że mamy uprawnienia do bezpośredniego dostępu do pól obiektów typu Tablica) . Obiekty tej klasy powinny móc zapamiętać tablicę dwuwymiarową (np. 10 wierszy i 30 kolumn) liczb całkowitych. a) Oblicz wartości elementów macierzy, b) ...
Czym się to różni od zwykłej tablicy dwuwymiarowej, której przykład zaprezentowałem wyżej?
Mam stworzyć tablicę jednowymiarową, a każda z nich zawierająca tablicę? Czyli co, tablicę dwuwymiarową? Polecenie jest dziwnie napisane... Jak je rozumieć?