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:
ab Zeile 48 findet die berechnung statt
ab Zeile 16 soll die ausgabematrix erstellt und ausgegeben werden.
Ich weiß nicht so recht was da alles falsch ist?
zum Quellcode von MatAnw:
in Zeile 24 möchte ich die neue Matrix ausgeben. Ist das so richtig? Die Eingabe der Matrix usw Funktioniert. Es geht nur um die Ausgabe.
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:
ab Zeile 48 findet die berechnung statt
ab Zeile 16 soll die ausgabematrix erstellt und ausgegeben werden.
Ich weiß nicht so recht was da alles falsch ist?
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 möchte ich die neue Matrix ausgeben. Ist das so richtig? Die Eingabe der Matrix usw Funktioniert. Es geht nur um die Ausgabe.
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;
}
}