Matrix einlesen

Status
Nicht offen für weitere Antworten.

byte

Top Contributor
Offensichtlich soll die Eingabe über den Aufruf der Main-Methode passieren. Also alle n x m int Werte werden beim Programmaufruf über die Konsole mitgegeben. Du musst also entsprechend die String[] args auslesen und damit das 2D Array initialisieren.
 
G

Guest

Gast
Und genau darin liegt mein Problem, ...
ich habe keinen Plan wie ich da ran gehen soll.
Ne, Musterlösung für den Einlesevorgang
mit der ein oder anderen Erklärung wäre sehr hilfreich.
 
B

bygones

Gast
joh dann viel erfolg... eine grundregel des Forums ist leider keine hausaufgaben komplett zu loesen...

aber warten wir... jedenfalls verschoben
 

byte

Top Contributor
Die Main-Methode hat als Parameter ein String-Array. Wenn Du nun eine Java Klasse per Konsole aufrufst, kannst Du ihr Parameter mitgeben, z.B. für eine Klasse MainClass.java

Code:
> java MainClass Frohe Ostern

Du kannst nun in der Main Methode diese Parameter auslesen und verarbeiten. Also in diesem Fall wäre args[0] -> "Frohe" und args[1] -> "Ostern". In Deinem Fall könntest Du auf diese Weise die Werte für Deine Matrix übergeben. Du musst halt nur aus diesen Werten, die ja als Strings reinkommen, dann ints machen und damit Deine Matrix (2D Array) füllen.
 
G

Guest

Gast
Im eindimensionalen verstehe ich das ganze auch mit Einlesen
von Arrays, was mir aber Probleme bereitet ist unter anderem
der Zeilenumbruch bzw "\n".
Code:
import IOulm.*;

public class matr {
	
	public static final int cols = 4;
	public static final int rows = 3;
	
	
	public static void main(String[] args) {
		
	
		char eingabe;
		int enter=0;
		
		Write.Line("Bitte geben Sie eine Matrix ein:");
		while(Urc.readChar()){                          //Urc.readChar ist eine Vereinfachung zum Einlesen für uns Noobs
			eingabe = Urc.getChar();              // Urc.getChar ebenfalls 
			if(eingabe == '\n'){
				enter = enter+1;
			}
			if (enter == rows){                    // beim 3. Mal Enter wird die Aufgabe bearbeitet
				Write.Line("Aufgabe wird bearbeitet");

			}
		}
	}
}

Wenn ich jetzt nen anstelle Char eben String einlesen lasse, kann ich in meiner Dos-Umgebung so viele Enter drücken
wie ich will, ... es wird immer weiter eingelesen ...
 
B

Beni

Gast
Wenn das "Urc"-Dingsbums ein String einliest, wird das "Enter" vielleicht abgeschnitten? Es wäre interessant zu wissen ob "String einlesen" bis zum nächsten Leerzeichen liest, oder ob das die ganze Linie ist (dann müsstest du einfach row-mal einen String lesen).
 
G

Guest

Gast
"einfach" hört sich schon mal gut an ...
String einlesen ist bis zum Ende der Zeile.
Heißt das, dass jede neue Zeile ein neuer String ist? ...
damit lässt sich dann wohl arbeiten.
Thx bis dahin .
 
G

Guest

Gast
Wo hab ich hier denn meinen Fehler?

Code:
import IOulm.*;

public class matr {
	
	public static final int cols = 4;                           //Zeilenlänge
	public static final int rows = 3;                         // Zeilenanzahl
	
	
	
	public static void main(String[] args) {
		
	
		int i=0;
		int j=0;
		String[][] eingabeArray = new String[rows][cols]; 
	
		
		Write.Line("Bitte geben Sie eine Matrix ein:");
		
		while(Urc.readString()){
			
	 		eingabeArray[i][j] = Urc.getString();
			
				if(eingabeArray[i].length==cols){            //wenn das array der Reihe i die Länge cols hat
				i++;                                                     // wird die Reihe gezählt;
				if (i==rows) {                                       // wenn 3 Reihen vorhanden sind, verlässt er die Schleife
					break;
				}
			}
		}Write.Line("Es kann weiter gearbeitet werden");    // Kontrollausgabe ...... 
	}
}

Ausgabe lautet:
1234
2345
3456
Es kann weiter gearbeitet werden

Allerdings ist auch möglich:
12345678
23456789
34567890
Es kann weiter gearbeitet werden

Dachte da müsste ein "Stack Overflow" erscheinen, weil das array ja maximal die Größe "cols=4" hat.
Oder is das mal wieder n dummer Zufall dass das Programm läuft?
Wie kann ich denn jetzt das Zeichen an der Stelle[j] ausgeben?
anstelle von
Code:
Write.Line("es kann weiter gearbeitet werden") ;
könnte ich doch
Code:
Write.Line(""+eingabeArray[1][2]);
schreiben ...
Als Ergebnis liefert er mir dann

1234
2345
3456
4567
null

Ich hab echt keinen Plan, ... und falls ich zur Belustigung beitrage mit dem Quelltext
macht das auch nix. Dann er wenigstens überhaupt einen Sinn :)
 
G

Guest

Gast
So denn, nach reger Hilfe und Beiträgen is das wohl ein Lösungsweg ...

Code:
int [][] TransposeMatrix(int [][] m){

        //neue matrix vertauscht
        int [][] neu = int[cols][rows];
        //zwei for schleifen und werte kopieren
        for(int x=0;x<cols;x++)
                for(int y=0;y<rows;y++)
                        neu[x][y]=m[y][x];
        return neu;

}

void PrintMatrix(int [][] m){

        //zwei for schleifen und werte ausgeben

}

int [][] ReadInput(){

        //neue matrix erstellen
        int [][] m= int[rows][cols];

        //spalten und zeilen durchgehen und mit werten füllen
        for(int y=0;y<rows;y++)
        {
                for(int x=0;x<cols;x++){

                        int i einlesen;
                        m[y][x]=i;
                }
                //nach cols eingaben wieder von vorne anfangen
                System.out.Write("\n");

        }
        return m;
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben