michael80: Feld an Methode übergeben und neues Feld zurück bekommen

Hallo

Ich möchte mittels eine Methode eine Matrix (Feld) transponieren.

Bsp.:

3  5    zu   2   4   5
2  4   --->  1   2   3
1  2

Dazu habe ich eine Methode geschrieben, die das realisieren soll - diese (sollte) auch funktionieren.

Mein Problem ist nun, wie ruf ich diese Methode auf? Ich bekomme immer einen Fehler auf der Konsole, der so aussieht, als wären die Feldlängen nicht in Ordnung...

---
import java.io.*;
public class transformation_matrix2 {

public static double trans (double matrix_in [][]){
    int anz_zeile = matrix_in.length;
    int anz_spalte = matrix_in[0].length;
    double matrix_out[][] = new double [anz_spalte][anz_zeile];

for (int i=0; i<anz_zeile; i++){
      for (int j=0; j<anz_spalte; j++){
        matrix_out[anz_spalte-j-1][anz_zeile-i-1]=matrix_in[i][j];
      }
    }
  return matrix_out[anz_spalte][anz_zeile];
  }

public static void  main (String[] args) {

int n=3;
    int m=2;
    double matrix_a [][] = new double [n][m];
    double matrix_trans [][] = new double [m][n];

matrix_a[0][0]=3;
    matrix_a[0][1]=5;

matrix_a[1][0]=2;
    matrix_a[1][1]=4;

matrix_a[2][0]=1;
    matrix_a[2][1]=2;

matrix_trans[m][n]=trans(matrix_a);

for (int i=0; i<n; i++){
      for (int j=0; j<m; j++){
        System.out.print(matrix_a[i][j]+"\t");
      }
      System.out.println();
    }

System.out.println();
    System.out.println();

for (int i=0; i<m; i++){
      for (int j=0; j<n; j++){
        System.out.print(matrix_trans[i][j]+"\t");
      }
      System.out.println();
    }

}
}
--

matrix_trans[m][n]=trans(matrix_a); damit wollte ich die Methode aufrufen, aber es will nicht so recht. Wie muss ich es machen bzw. wo steckt mein Fehler?

Beste Grüße Micha

  1. michael80,

    Mit Java müssen dir andere weiterhelfen, aber transponieren wäre das:

    3  5    zu   3   2   1
    2  4   --->  5   4   2
    1  2

    Gunnar

    --
    "Nobody wins unless everybody wins." (Bruce Springsteen)
    1. Hi Gunnar

      Kleiner denkfehler meinerseits - thx für den Hinweis!

      Hi Z.N.S

      Also den Fehler, den mir die Konsole ausgibt, ist folgender:

      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
      at transformation_matrix2.main

      Ich habe das Programm zuvor ganz normal geschrieben - das funktioniert:
      ----
      import java.io.*;
      public class transformation_matrix1 {
        public static void  main (String[] args) {

      int n=3;
          int m=2;
          double matrix_in [][] = new double [n][m];
          double matrix_out [][] = new double [m][n];

      matrix_in[0][0]=3;
          matrix_in[0][1]=5;

      matrix_in[1][0]=2;
          matrix_in[1][1]=4;

      matrix_in[2][0]=1;
          matrix_in[2][1]=2;

      for (int i=0; i<n; i++){
            for (int j=0; j<m; j++){
              System.out.print(matrix_in[i][j]+"\t");
            }
            System.out.println();
          }

      for (int i=0; i<matrix_in.length; i++){
            for (int j=0; j<matrix_in[0].length; j++){
              matrix_out[j][i]=matrix_in[i][j];
            }
          }

      System.out.println();
          System.out.println();

      for (int i=0; i<m; i++){
            for (int j=0; j<n; j++){
              System.out.print(matrix_out[i][j]+"\t");
            }
            System.out.println();
          }
        }
      }
      ---

      Nun wollte ich das in eine Methode fassen:

      ---
      import java.io.*;
      public class transformation_matrix2 {

      public static double trans (double matrix_in[][]){
          int anz_zeile = matrix_in.length;
          int anz_spalte = matrix_in[0].length;
          double matrix_out[][] = new double [anz_spalte][anz_zeile];

      for (int i=0; i<anz_zeile; i++){
            for (int j=0; j<anz_spalte; j++){
              matrix_out[j][i]=matrix_in[i][j];
            }
          }
        return matrix_out[anz_spalte][anz_zeile];
        }

      public static void  main (String[] args) {

      int n=3;
          int m=2;
          double matrix_a [][] = new double [n][m];
          double matrix_trans [][] = new double [m][n];

      matrix_a[0][0]=3;
          matrix_a[0][1]=5;

      matrix_a[1][0]=2;
          matrix_a[1][1]=4;

      matrix_a[2][0]=1;
          matrix_a[2][1]=2;

      matrix_trans[m][n]=trans(matrix_a);

      for (int i=0; i<n; i++){
            for (int j=0; j<m; j++){
              System.out.print(matrix_a[i][j]+"\t");
            }
            System.out.println();
          }

      System.out.println();
          System.out.println();

      for (int i=0; i<m; i++){
            for (int j=0; j<n; j++){
              System.out.print(matrix_trans[i][j]+"\t");
            }
            System.out.println();
          }

      }
      }
      ---

      Mein Problem ist also: wie übergebe ich ein Array an die Methode, und wie bekomme ich dann das neu generierte Feld aus der Methode zurück???

      Micha

      1. abend,

        sorry, hab jetzt grad nicht sor echt zeit.
        aber schau mal unter http://www.uni-muenster.de/ZIV/Mitarbeiter/HilmarPudlatz/V12.txt,
        dort wird ein Class "Transponiere" erstellt.

        mfg,
        (tanz das)
        Z.N.S.

        --
        <img src="http://www.comunicout.com/zebulon/en.gif" border="0" alt="">
        .:LIFE ON OTHER PLANETS IS DIFFICULT:.
        1. dort wird ein Class "Transponiere" erstellt.

          Also das Transponieren ist nicht mein Problem, sondern die Übergabe des Feldes (Matrix A) an meine Methode trans() und das zurückbekommen des neuen Feldes (Matrix A1^-1)

          Also rechnerisch ist das klar - mein Problem ist lediglich der Aufruf der Methode

          mein Methode:
          public static double trans (double matrix_in[][]){
              int anz_zeile = matrix_in.length;
              int anz_spalte = matrix_in[0].length;
              double matrix_out[][] = new double [anz_spalte][anz_zeile];

          return matrix_out
          }

          Wie ruf ich die auf?
          Mit : matrix_trans[m][n]=trans(matrix_a); geht es nicht.

          1. Fehler gefunden:

            public static double [][] trans (double matrix_in[][])

            muss es heißen...

            Danke Micha

  2. abend,

    damit wollte ich die Methode aufrufen, aber es will nicht so recht.

    das heisst? poste doch mal die exception..

    mfg,
    (tanz das)
    Z.N.S.

    --
    <img src="http://www.comunicout.com/zebulon/en.gif" border="0" alt="">
    .:LIFE ON OTHER PLANETS IS DIFFICULT:.