Hi, bin grad dabei ein programm zu schreiben welches Matrizen berechnen kann.
ich habe folgendes Problem:
Zeile 13 bekommt den String u wo die Koeffizienten der Matrix in double konvertiert werden.
Das Problem habe ich mittlerweile gelöst.
nun möchte ich aber das in meiner Anwender Klasse (siehe unten) ich auf die erstellte Matrix aus dem Konstruktor String u zugreife und die werte mir in Zeile 123 aus der klasse MatAnw übergeben werden und ich diese als meine Matrix a definieren kann und somit zurückgebe um dann damit weiter zu rechnen.
ich habe folgendes Problem:
Zeile 13 bekommt den String u wo die Koeffizienten der Matrix in double konvertiert werden.
Das Problem habe ich mittlerweile gelöst.
nun möchte ich aber das in meiner Anwender Klasse (siehe unten) ich auf die erstellte Matrix aus dem Konstruktor String u zugreife und die werte mir in Zeile 123 aus der klasse MatAnw übergeben werden und ich diese als meine Matrix a definieren kann und somit zurückgebe um dann damit weiter zu rechnen.
Java:
import java.io.*;
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
String u[];
String dsnA;
Mat(){}
//Konstruktor String u
Mat(String u[]){
int i,j;
String h[][];
n=u.length;
h=new String[n][];
for(i=0;i<n;i++){
h[i]=u[i].split(";");
}
m=h.length;
k=new double[n][m];
for(i=0;i<n;i++){
for(j=0;j<m;j++){
k[i][j]=Double.parseDouble(h[j][i]);
}
}
}
//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();
}
System.out.println();
}
//Matrizenaddition
Mat matAdd(Mat b){
Mat c=new Mat();
int i,j;
if(n==b.n && m==b.m){
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{
ctr=-1;
System.out.println("Fehlerart -1!");
}
return c;
}
//Skalarmultiplikation
Mat matSkm(double w){
Mat c=new Mat();
int i,j;
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){
Mat c=new Mat();
int i,j,o;
if(m==b.n){
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;
System.out.println("Fehlerart -2!");
}
return c;
}
//Transponierte Matrix
Mat matTransp(){
Mat c=new Mat();
int i,j;
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;
}
//Schreiben der Ausgabedatei
void mat2Dat(String dsnA)throws IOException{
FileWriter fw1=new FileWriter(dsnA);
PrintWriter pw1=new PrintWriter(fw1);
String matrix="";
int i,j;
for(i=0;i<this.k.length;i++) {
for(j=0;j<this.k[i].length;j++) {
matrix=matrix +this.k[i][j]+" ";
}
pw1.println(matrix);
matrix="";
}
fw1.close();
}
}
Java:
import java.io.*;
class MatAnw{
public static void main(String args[])throws IOException{
int ma,i,j;
System.out.println("MATRIZEN RECHNUNG");
String u[];
int ex;
do{
System.out.println("\nBitte wählen Sie einen Menüpunkt aus:\n\n (1) Die Matrix manuell eingeben\n (2) Die Matrix als CSV String eingeben\n (3) Die Matrix aus CSV Datei einlesen\n");
ex=IO1.einint();
if(ex<1||ex>3){
System.out.println("\nFalsche Auswahl!");
}
}while(ex<1||ex>3);
Mat a=matEin(ex);
Mat b=new Mat();
Mat c=new Mat();
do{
ma=menue();
switch(ma){
case 1:
System.out.println("\nBitte geben sie die zu addierende Matrix ein:\n");
b=matEin(ex);
c=a.matAdd(b);
c.matAus();
break;
case 2:
System.out.println("\nBitte geben Sie einen Skalar ein:");
double w=IO1.eindouble();
System.out.println();
c=a.matSkm(w);
c.matAus();
break;
case 3:
System.out.println("\nBitte geben sie die zu multiplizierende Matrix ein:\n");
b=matEin(ex);
c=a.matMul(b);
c.matAus();
break;
case 4:
break;
}
String dsnA="dsnA.TXT";
c.mat2Dat(dsnA);
}while(ma!=5);
}
//Menüauswahl
static int menue(){
int ma; // Menuepunkt
do{
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 (5) ENDE\n");
ma=IO1.einint();
if(ma<1||ma>5){
System.out.println("\nFalsche Auswahl!\n");
}
}while(ma<1||ma>5);
return ma;
}
//Matrix einlesen
static Mat matEin(int ex){
Mat a=new Mat();
int n,m,i,j;
switch(ex){
case 1:
do{
System.out.println("\nBitte 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);
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);
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;
break;
case 2:
do{
System.out.println("\nBitte 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);
String u[];
u=new String[n];
System.out.println("Bitte geben Sie die Matrizenkomponenten im Format Zahl;Zahl ein:\n");
for(i=0;i<u.length;i++){
System.out.println("Bitte "+(i+1)+". Zeile eingeben:");
u[i]=IO1.einstring();
}
System.out.println();
break;
case 3:
break;
}
return a;
}
static String[] dat2StF(String dsn){
String u[];
FileReader fr1=new FileReader("dsn.TXT");
BufferedReader br1=new BufferedReader(fr1);
String u=br1.readLine();
return u;
}
}