# Array Matrizen, int[][]



## matt65 (15. Mai 2010)

Hi, habe folgendes Problem und benötige Unterstützung: im nachfolgenden Java-Text erstelle ich zwei Matrizen in der Form eines zweidimnesionalen Arrays.

Nun möchte ich auf zwei ganz bestimmte Spalten einer m x n Matrix zugreifen und deren beiden Spaltenwerte jeweils tauschen; wobei ich die Spaltennummer mit der Tastatur eingeben wollte, ich stehe im Moment auf dem Schlauch und bringe das selbst nicht hin.

Hier mein Text:


```
public class scalarMatrix {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[][];
		int b[][];
		int c[][];
		int e[][];
		int s[][];
		int f[];
		int matrixE[][];
		int m1 = 0;
		int m2 = 0;
		int m4 = 0;
		int n1 = 0;
		int n2 = 0;
		
			

			
		/*
		 * EINGABEN FUER DIE MATRIX -A-
		 */
		System.out.println("Anzahl der Zeilen der ersten Matrix:");
		m1 = IOUtils.readInt();
		System.out.println("Anzahl der Spalten der ersten Matrix:");
		n1 = IOUtils.readInt();

		a = new int[m1][n1];

		System.out.println("Es folgt die Eingabe der Werte:");
		for (int i = 0; i < m1; i++) {
			for (int j = 0; j < n1; j++) {
				System.out.println("a[" + i + "][" + j + "]:");
				a[i][j] = IOUtils.readInt();
			}
		}

		/*
		 * EINGABEN FUER DIE MATRIX -B-
		 */
		System.out.println("\nAnzahl der Zeilen der zweiten Matrix:");
		m2 = IOUtils.readInt();
		System.out.println("Anzahl der Spalten der zweiten Matrix:");
		n2 = IOUtils.readInt();

		b = new int[m1][n1];

		System.out.println("Es folgt die Eingabe der Werte:");
		for (int i = 0; i < m2; i++) {
			for (int j = 0; j < n2; j++) {
				System.out.println("b[" + i + "][" + j + "]:");
				b[i][j] = IOUtils.readInt();
			}
		}
```

Das mit dem Spaltentausch müsste ungefähr so aussehen:



```
a[i][] =IOUtils.readInt();
//Eingabe der Spaltennummer j, Bsp. Tausch 2. und 3. Spalte - über Tastatur

for (int j = 0; j < n1; j++) {
j2 = temp
j3 = new j2
temp = j3 
System.out.println("a[" + i + "][" + j + "]:");
```

Das scheint aber so nicht zu funktionieren.
Ich bitte um Hilfe, damit ich das Problem über Fehlermeldungen bzw. Definition der Spalten beheben kann.

Danke.


----------



## Java.getSkill() (15. Mai 2010)

wozu machst du 2 matrizen, wenn du nur in einer davon 2 Spalten vertauschen möchtest? Die 2. Matrix wird nicht benutzt?

Du musst nun einfach eine der beiden Spalten in eine Liste oder ein anderes Array schreiben. Nennen wir es AUSHILFE. Machst also eine Kopie von der Spalte A in AUSHILFE. Dann nimmst du die Spalte B und überschreibst die Werte in der Spalte A. In der Spalte A und Spalte B stehen jetzt die Werte von der Spalte B. Jetzt nimmst du die Werte aus AUSHILFE (sind ja die ursprünglichen Werte aus Spalte A) und speicherst diese in Spalte B.

aushilfe=spalte A;
Spalte A= Spalte B;
Spalte B= aushilfe;


----------



## matt65 (15. Mai 2010)

Ja schon klar, die andere Matrix hab ich noch für was anderes gebraucht.

jetzt aber nochmal zum Tausch, wie muss ich dass konkret formulieren das ich dann das Ergebnis bekomme, das Prinzip ansich habe ich schon verstanden.

Zur Matrix A: dort möchte ich zum Beispiel die 2. und die 3. Spalte miteinander tauschen, wobei die Eingabe der zu tauschenden Spalten ich mit der Tastatur eingeben möchte. Wie muss ich das umsetzen?


----------



## Java.getSkill() (15. Mai 2010)

Das Ding tauscht die spalten aus. Ist aber nur schneller hack, würd sicher auch effizienter gehen.
Gib am besten mal spalteA=0 und spalteb=4 ein.



```
/* Hier wird bei einer Matrix nxm ein Spaltentausch vorgenommen
 * 2 Spalten/Werte werden vertauscht
 * 
 * schneller Hack, ka ob alles stimmt
 */

package a1;

import java.util.Scanner;

public class ArraySpaltenTausch {

	public static void main(String[] args) {

		int zeile = 8;
		int spalte = 5;
		int[][] matrix = new int[zeile][spalte];
		int[][] aushilfe = new int[zeile][spalte];

		System.out.println("Zeilen: " + matrix.length + "\nSpalten: " + spalte);
		System.out.println("Spalten also von 0 ... 4 auswählbar");
		
		//hier wird mal in die ersten 3 von den 5 Spalten Einser eingelesen
		for (int laufZeile = 0; laufZeile < matrix.length; laufZeile++) {
		
			//jede Zeile kann verschiedene Anzahl von Spalten haben
			//deswegen wird für jede Zeile die # von Spalten angeschaut matrix[laufZeile].length;
				
			for (int laufSpalte = 0; laufSpalte < 3; laufSpalte++) {
				
				matrix[laufZeile][laufSpalte] = 1;
			}
		}

		for (int laufZeile = 0; laufZeile < matrix.length; laufZeile++) {
			for (int laufSpalte = 0; laufSpalte < matrix[laufZeile].length; laufSpalte++) {
				System.out.print(matrix[laufZeile][laufSpalte]);
			}
			System.out.println();
		}

	
		int spalteA;
		int spalteB;
		Scanner myscanner = new Scanner(System.in);
		
		System.out.println("Gib spalte A ein:");
		spalteA = myscanner.nextInt();
		System.out.println("Gib spalte B ein:");
		spalteB = myscanner.nextInt();

		// tauschen
		for (int laufZeile = 0; laufZeile < matrix.length; laufZeile++) {
			aushilfe[laufZeile][0] = matrix[laufZeile][spalteA];
			matrix[laufZeile][spalteA] = matrix[laufZeile][spalteB];
			matrix[laufZeile][spalteB] = aushilfe[laufZeile][0];

		}

		for (int laufZeile = 0; laufZeile < matrix.length; laufZeile++) {

			for (int laufSpalte = 0; laufSpalte < matrix[laufZeile].length; laufSpalte++) {
				System.out.print(matrix[laufZeile][laufSpalte]);
			}
			System.out.println();
		}

	}
}
```


----------



## matt65 (16. Mai 2010)

Hi
funktionieren tut das ganze zwar, aber leider verwendet dein Algorithmus nicht die von mir eingegebene Matrix und ich bekomme als Ergebnismatrix immer so etwas 11001, 11001, 11100, etc.

Kann man das noch irgendwie anpassen, verbessern sodass ich mit meinen Matrizen etwas anstellen kann.

Danke für die Antwort.


----------



## Java.getSkill() (17. Mai 2010)

ja eh, du musst jetzt einfach dein Beispiel und meines kombinieren.

Wo du deine Funktionalität haben möchtest, da tauscht du einfach die Schleifen mit meinen aus, aber du siehst zumindest wie es ablaufen kann


----------

