Modyfikacja rozmiaru tablicy przez funkcję

Odpowiedz Nowy wątek
2011-08-06 18:23
0

Mam taką treść zadania:

Napisać funkcję void mirror(int[][] tab), która odwróci tablicę tab najpierw względem pionowej osi tablicy, a następnie względem jej osi pionowej.

Chciałem to zrobić, ale nie wiem jak zmienić rozmiar tablicy w funkcji. Napisałem tak:

package pl.java.mirror;
 
import java.util.Random;
 
public class Mirror {
 
    public static void main(String[] args) {
        int tab[][] = new int [5][5];
 
        Mirror g = new Mirror();
        g.Wypelnij(tab);
        g.Wyswietl(tab);
        g.mirror(tab);
        System.out.println();
        g.Wyswietl(tab);
 
    }
 
    public void Wypelnij(int t[][])
    {
        int n = t.length;
        int m = t[0].length;
        Random rn = new Random();
 
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                t[i][j] = rn.nextInt() % 10;
    }
 
    public void Wyswietl(int t[][])
    {
        int n = t.length;
        int m = t[0].length;
 
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                System.out.print(t[i][j] + "\t");
 
            System.out.println();
        }
    }
 
    public void mirror(int t[][])
    {
        int n = t.length;
        int m = t[0].length;
        int t2[][] = new int [m][n];
 
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                t2[j][i] = t[i][j];
 
        t = t2;
 
    }
 
}
 

Jednak to nie działa. Jest jakiś inny sposób?

Pozostało 580 znaków

2011-08-06 19:05
0

Zrób int[][] mirror i zamiast t = t2 daj return t2. Funkcje i metody raczej nie powinny modyfikować parametrów.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-08-06 19:14
bo
0

@autor, to rozumiesz to zdanie?

która odwróci tablicę tab najpierw względem pionowej osi tablicy, a następnie względem jej osi pionowej.

Po mojemu końcowa tablica jest identyczna z wyjściową, o ile tablica w ogóle ma oś pionową (tzn. ma nieparzystą ilość kolumn).

Pozostało 580 znaków

2011-08-06 19:17
0

Fakt, na stronie jest napisane, żeby odwrócić 2 razy tablicę po pionie, ale uznałem to za błąd. Dla wprawki robię zadanie bardziej ambitne.

Po modyfikacji program wygląda tak:

package pl.java.mirror;
 
import java.util.Random;
 
public class Mirror {
 
    public static void main(String[] args) {
        int tab[][] = new int [5][5];
 
        Mirror g = new Mirror();
        g.Wypelnij(tab);
        g.Wyswietl(tab);
        tab = g.mirror(tab);
        System.out.println();
        g.Wyswietl(tab);
 
    }
 
    public void Wypelnij(int t[][])
    {
        int n = t.length;
        int m = t[0].length;
        Random rn = new Random();
 
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                t[i][j] = rn.nextInt() % 10;
    }
 
    public void Wyswietl(int t[][])
    {
        int n = t.length;
        int m = t[0].length;
 
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                System.out.print(t[i][j] + "\t");
 
            System.out.println();
        }
    }
 
    public int [][] mirror(int t[][])
    {
        int n = t.length;
        int m = t[0].length;
        int t2[][] = new int [m][n];
 
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                t2[j][i] = t[i][j];
 
        return t2;
    }
 
}
 
edytowany 1x, ostatnio: michal_2, 2011-08-06 19:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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