Matrizenrechnung Problem mit Ausgabe

  • Themenstarter Themenstarter ph
  • Beginndatum Beginndatum

ph

Mitglied
Hi,
ich habe ein Problem bei der Ausgabe meiner berechneten Matrix bei der Skalaren Multiplikation.
Ich bekomme immer eine NullPointerException.

Zum Programm: Ich habe zwei class Dateien eine Mat und eine MatAnw
in der klasse Mat findet die berechnung sowie die ausgabe statt. In MatAnw findet die Eingabe der Matrix und auswahl was mit ihr geschehen soll, statt.

zum Quellcode von Mat:
c ist die NEUE Matrix diese soll Ausgegeben werden in void matAus
in Zeile 48 findet die Berechnung statt und in Zeile 16 soll die ausgabe stattfinden.

Java:
class Mat{
  int n;          // Zeilenzahl
  int m;          // Spaltenzahl
  double k[][];   // Feld für die Koeffizienten der Matrix
  int ctr;        // Kontrollfeld, ob die Matrix richtig gefüllt ist
  Mat c;
  
  Mat(){}
  Mat(int n,int m,double k[][]){
    this.n=n;
    this.m=m;
    this.k=k;
  }
  
  //Matrizenausgabe
  void matAus(){
    int i,j;
    for(i=0;i<c.k.length;i++) {
      for(j=0;j<c.k[i].length;j++) {
        System.out.print(c.k[i][j]+"  ");
      }
      System.out.println();
    }
  }
  
  //Matrizenaddition
  Mat matAdd(Mat b){
    int i,j;
    if(n==b.n && m==b.m){
      Mat c=new Mat();
      c.n=n;
      c.m=m;
      c.k=new double[n][m];
      for(i=0;i<n;i++){
        for(j=0;j<m;j++){
          c.k[i][j]=k[i][j]+b.k[i][j];
        }
      }
    }
    else{
      System.out.println("Matrizen ungleich!");
      ctr=-1;
    }
    return c;
  }

  //Skalarmultiplikation
  Mat matSkm(double w){
    int i,j;
    Mat c=new Mat();
    c.n=n;
    c.m=m;
    c.k=new double[n][m];
    for(i=0;i<n;i++){
      for(j=0;j<m;j++){
        c.k[i][j]=k[i][j]*w;
      }
    }
    return c;
  }

  //Matrizenmultiplikation
  Mat matMul(Mat b){
    int i,j,o;
    if(m==b.n){
      Mat c=new Mat();
      c.m=b.m;
      c.n=n;
      c.k=new double[n][m];
      c.k[0][0]=0;
      for(i=0;i<n;i++){
        for(j=0;j<b.m;j++){
          for(o=0;o<c.n;o++){
            c.k[i][j]=c.k[i][j]+k[i][o]*b.k[o][j];
          }
        }
      }
    }
    else{
      ctr=-2;
    }
    return c;
  }
  
  //Transponierte Matrix
  Mat matTransp(){
    int i,j;
    Mat c=new Mat();
    c.n=n;
    c.m=m;
    for(i=0;i<n;i++){
      for(j=0;j<m;j++){
        c.k[j][i]=k[i][j];
      }
    }
    return c;
  }

zum Quellcode von MatAnw:
in Zeile 24 bekomme ich die Fehlermeldung meiner Exception

Java:
import java.io.*;
class MatAnw{
  public static void main(String args[])throws IOException{
    int ma,i,j;
    System.out.println("MATRIZEN RECHNUNG");
    System.out.println("\nEingabe der Matrix:\n");
    Mat a=matEin();
    ma=menue();
    Mat b=new Mat();
    Mat c=new Mat();
    
    switch(ma){
      case 1:
      System.out.println("\nBitte geben sie die zu addierende Matrix ein:\n");
      b=matEin();
      c=c.matAdd(b);
      break;
      
      case 2:
      System.out.println("\nBitte geben Sie einen Skalar ein:");
      double w=IO1.eindouble();
      System.out.println();
      c=c.matSkm(w);
      c.matAus();
      break;
    }
    
  }
  
  //Menüauswahl
  static int menue(){
    int ma;   // Menuepunkt
    System.out.println("Bitte waehlen Sie einen Menuepunkt aus:\n\n (1) Addition zweier Matrizen\n (2) Skalare Multiplikation\n (3) Multiplikation zweier Matrizen\n (4) Transponierte Matrix berechnen\n");
    ma=IO1.einint();
    return ma;
  }
  
  //Matrix einlesen
  static Mat matEin(){
    Mat a=new Mat();

    int n;
    do{
      System.out.println("Bitte geben Sie die Zeilenanzahl an:");
      n=IO1.einint();
      System.out.println();
      if(n<=0){
        System.out.println("Bitte Zahl größer Null eingeben!");
      }
    }while(n<=0);

    int m;
    do{
      System.out.println("Bitte geben Sie die Spaltenanzahl an:");
      m=IO1.einint();
      System.out.println();
      if(m<=0){
        System.out.println("Bitte Zahl größer Null eingeben!");
      }
    }while(m<=0);

    int i,j;
    double k[][]=new double[n][m];
    for(i=0;i<n;i++){
      for(j=0;j<m;j++){
        System.out.println("Bitte "+(i+1)+". Zeilen- und "+(j+1)+". Spaltenkomponente eingeben!");
        k[i][j]=IO1.eindouble();
        System.out.println();
      }
    }
    
    a.ctr=1;
    a.n=n;
    a.m=m;
    a.k=k;
    return a;
  }
}
 
Zuletzt bearbeitet:
Das Attribut Mat c in deiner Klasse ist Blödsinn und kann ersatzlos gestrichen werden. In der Ausgabemethode schreibe this.xxx statt c.xxx.

Sollte es immer noch nicht klappen, dann poste bitte den gesamten Stacktrace der Fehlermeldung.

Gruß Fant
 
Das Attribut Mat c in deiner Klasse ist Blödsinn und kann ersatzlos gestrichen werden. In der Ausgabemethode schreibe this.xxx statt c.xxx.

Sollte es immer noch nicht klappen, dann poste bitte den gesamten Stacktrace der Fehlermeldung.

Gruß Fant

Danke schonmal, wenn ich Mat c; lösche bekomme ich aber eine Fehlermeldung weil die Methoden mir ja c zurückgeben? Was nu?
 
In den Methode matMal und matMal erstellst du das MAtrix-Object nur, wenn die if-Bedindung erfüllt ist. Schreibe das Mat c = new Mat(); einfach direkt an den Anfang dieser Methoden.

Gruß Fant
 
In den Methode matMal und matMal erstellst du das MAtrix-Object nur, wenn die if-Bedindung erfüllt ist. Schreibe das Mat c = new Mat(); einfach direkt an den Anfang dieser Methoden.

Gruß Fant

Danke das hat soweit geklappt, die Fehlermeldung is auch weg, nur passiert jetzt garnix.
Das is mein Fenster:

MATRIZEN RECHNUNG

Eingabe der Matrix:

Bitte geben Sie die Zeilenanzahl an:
2

Bitte geben Sie die Spaltenanzahl an:
2

Bitte 1. Zeilen- und 1. Spaltenkomponente eingeben!
2

Bitte 1. Zeilen- und 2. Spaltenkomponente eingeben!
2

Bitte 2. Zeilen- und 1. Spaltenkomponente eingeben!
2

Bitte 2. Zeilen- und 2. Spaltenkomponente eingeben!
2

Bitte waehlen Sie einen Menuepunkt aus:

(1) Addition zweier Matrizen
(2) Skalare Multiplikation
(3) Multiplikation zweier Matrizen
(4) Transponierte Matrix berechnen

2

Bitte geben Sie einen Skalar ein:
2

Habe ich wie folgt geändert:
Java:
 //Matrizenausgabe
  void matAus(){
    int i,j;
    for(i=0;i<this.k.length;i++) {
      for(j=0;j<this.k[i].length;j++) {
        System.out.print(this.k[i][j]+"  ");
      }
      System.out.println();
    }
  }
 
Es sollte c=a.matAdd(b); bzw c=a.matSkm(w); heißen (in deiner main-Methode). Denn du willst doch zur Matrix a den Skalat w multiplizieren und das Ergebnis in c speichern, wenn ich das richtig lese..

Gruß Fant
 
2. Drittel hat begonnen, deswegen nur ein kurzer Hinweis...so läuft dein Prog^^
für alle die es interessiert, unten das Prog von ph in einem KSKB...ansonsten in der nächsten Drittelpause. 😉

[XML]MATRIZEN RECHNUNG

Eingabe der Matrix:

Bitte geben Sie die Zeilenanzahl an:

3

Bitte geben Sie die Spaltenanzahl an:
3

Bitte 1. Zeilen- und 1. Spaltenkomponente eingeben!
1

Bitte 1. Zeilen- und 2. Spaltenkomponente eingeben!
1

Bitte 1. Zeilen- und 3. Spaltenkomponente eingeben!
1

Bitte 2. Zeilen- und 1. Spaltenkomponente eingeben!
1

Bitte 2. Zeilen- und 2. Spaltenkomponente eingeben!
1

Bitte 2. Zeilen- und 3. Spaltenkomponente eingeben!
1

Bitte 3. Zeilen- und 1. Spaltenkomponente eingeben!
1

Bitte 3. Zeilen- und 2. Spaltenkomponente eingeben!
1

Bitte 3. Zeilen- und 3. Spaltenkomponente eingeben!
1

Bitte waehlen Sie einen Menuepunkt aus:

(1) Addition zweier Matrizen
(2) Skalare Multiplikation
(3) Multiplikation zweier Matrizen
(4) Transponierte Matrix berechnen

1

Bitte geben sie die zu addierende Matrix ein:

Bitte geben Sie die Zeilenanzahl an:
3

Bitte geben Sie die Spaltenanzahl an:
3

Bitte 1. Zeilen- und 1. Spaltenkomponente eingeben!
1

Bitte 1. Zeilen- und 2. Spaltenkomponente eingeben!
1

Bitte 1. Zeilen- und 3. Spaltenkomponente eingeben!
1

Bitte 2. Zeilen- und 1. Spaltenkomponente eingeben!
1

Bitte 2. Zeilen- und 2. Spaltenkomponente eingeben!
1

Bitte 2. Zeilen- und 3. Spaltenkomponente eingeben!
1

Bitte 3. Zeilen- und 1. Spaltenkomponente eingeben!
1

Bitte 3. Zeilen- und 2. Spaltenkomponente eingeben!
1

Bitte 3. Zeilen- und 3. Spaltenkomponente eingeben!
1

Matrizen ungleich![/XML]

Java:
import java.io.IOException;
import java.util.Scanner;

class MatAnw {
	public static void main(String args[]) throws IOException {
		int ma, i, j;
		System.out.println("MATRIZEN RECHNUNG");
		System.out.println("\nEingabe der Matrix:\n");
		Mat a = matEin();
		ma = menue();
		Mat b = new Mat();
		Mat c = new Mat();

		switch (ma) {
		case 1:
			System.out
					.println("\nBitte geben sie die zu addierende Matrix ein:\n");
			b = matEin();
			c = c.matAdd(b);
			break;

		case 2:
			Scanner sc = new Scanner(System.in);
			System.out.println("\nBitte geben Sie einen Skalar ein:");
			double w = sc.nextDouble();
			System.out.println();
			c = c.matSkm(w);
			c.matAus();
			break;
		}

	}

	// Menüauswahl
	static int menue() {
		Scanner sc = new Scanner(System.in);
		int ma; // Menuepunkt
		System.out
				.println("Bitte waehlen Sie einen Menuepunkt aus:\n\n (1) Addition zweier Matrizen\n (2) Skalare Multiplikation\n (3) Multiplikation zweier Matrizen\n (4) Transponierte Matrix berechnen\n");
		ma = sc.nextInt();
		return ma;
	}

	// Matrix einlesen
	static Mat matEin() {
		Scanner sc = new Scanner(System.in);
		Mat a = new Mat();

		int n;
		do {
			System.out.println("Bitte geben Sie die Zeilenanzahl an:");
			n = sc.nextInt();// IO1.einint();
			System.out.println();
			if (n <= 0) {
				System.out.println("Bitte Zahl größer Null eingeben!");
			}
		} while (n <= 0);

		int m;
		do {
			System.out.println("Bitte geben Sie die Spaltenanzahl an:");
			m = sc.nextInt();
			System.out.println();
			if (m <= 0) {
				System.out.println("Bitte Zahl größer Null eingeben!");
			}
		} while (m <= 0);

		int i, j;
		double k[][] = new double[n][m];
		for (i = 0; i < n; i++) {
			for (j = 0; j < m; j++) {
				System.out.println("Bitte " + (i + 1) + ". Zeilen- und "
						+ (j + 1) + ". Spaltenkomponente eingeben!");
				k[i][j] = sc.nextDouble();
				System.out.println();
			}
		}

		a.ctr = 1;
		a.n = n;
		a.m = m;
		a.k = k;
		return a;
	}
}

class Mat {
	int n; // Zeilenzahl
	int m; // Spaltenzahl
	double k[][]; // Feld für die Koeffizienten der Matrix
	int ctr; // Kontrollfeld, ob die Matrix richtig gefüllt ist
	Mat c;

	Mat() {
	}

	Mat(int n, int m, double k[][]) {
		this.n = n;
		this.m = m;
		this.k = k;
	}

	// Matrizenausgabe
	void matAus() {
		int i, j;
		for (i = 0; i < c.k.length; i++) {
			for (j = 0; j < c.k[i].length; j++) {
				System.out.print(c.k[i][j] + "  ");
			}
			System.out.println();
		}
	}

	// Matrizenaddition
	Mat matAdd(Mat b) {
		int i, j;
		if (n == b.n && m == b.m) {
			Mat c = new Mat();
			c.n = n;
			c.m = m;
			c.k = new double[n][m];
			for (i = 0; i < n; i++) {
				for (j = 0; j < m; j++) {
					c.k[i][j] = k[i][j] + b.k[i][j];
				}
			}
		} else {
			System.out.println("Matrizen ungleich!");
			ctr = -1;
		}
		return c;
	}

	// Skalarmultiplikation
	Mat matSkm(double w) {
		int i, j;
		Mat c = new Mat();
		c.n = n;
		c.m = m;
		c.k = new double[n][m];
		for (i = 0; i < n; i++) {
			for (j = 0; j < m; j++) {
				c.k[i][j] = k[i][j] * w;
			}
		}
		return c;
	}

	// Matrizenmultiplikation
	Mat matMul(Mat b) {
		int i, j, o;
		if (m == b.n) {
			Mat c = new Mat();
			c.m = b.m;
			c.n = n;
			c.k = new double[n][m];
			c.k[0][0] = 0;
			for (i = 0; i < n; i++) {
				for (j = 0; j < b.m; j++) {
					for (o = 0; o < c.n; o++) {
						c.k[i][j] = c.k[i][j] + k[i][o] * b.k[o][j];
					}
				}
			}
		} else {
			ctr = -2;
		}
		return c;
	}

	// Transponierte Matrix
	Mat matTransp() {
		int i, j;
		Mat c = new Mat();
		c.n = n;
		c.m = m;
		for (i = 0; i < n; i++) {
			for (j = 0; j < m; j++) {
				c.k[j][i] = k[i][j];
			}
		}
		return c;
	}
}
 

Zurück
Oben