Spaltensummennorm

techdevil

Aktives Mitglied
Hi,

das ist eine Aufgabe aus einem Online-Aufgaben Angebot. Man kann Lösungen einreichen, diese werden dann Online getestet. Nun kommt bei mir beim letzten von 6 Tests ein falsches Ergebnis.
Das kann ich mir nicht erklären...
Aufgabe:

Schreiben Sie einen Methoden-Body, der zu einem int[][] die Spaltensummennorm berechnet.

Anleitung für die Spaltensummennorm:
Um die Spaltensummennorm einer Matrix zu bekommen addiert man spaltenweise die Beträge der Einträge einer Matrix, vergleicht die Ergebnisse der einzelnen Spalten und nimmt die größte Zahl.

Beispiel:

array_in = {{0 1 2},
{3 4 5},
{6 7 8}}

Spalte 1: 9
Spalte 2: 12
Spalte 3: 15

=> 15


Meine Lösung:
Java:
public static int Spaltensummennorm(int[][]matrix_in){
		
		int result = 0;
		int[] norms = new int[matrix_in.length];
		
		for(int i=0;i<matrix_in[0].length;i++){
			for(int j=0;j<matrix_in.length;j++){
				norms[i]=norms[i]+matrix_in[j][i];
			}
		}
		for(int i=0;i<norms.length;i++){
			if(norms[i]>result){result=norms[i];}
		}
		return result;
	}

Ist doch eigentlich die korrekte Lösung, oder etwa nicht?
 
S

SlaterB

Gast
dein norms-Array ist von der Länge matrix_in.length,

später greifst du aber mit norms darauf zu und i läuft bis matrix_in[0].length
das funktioniert nur mit einem quadratischen Array ausreichend gut und in diesem Fall wäre es unnötig kompliziert
(matrix_in.length, matrix_in[0].length, norm.length)

wenn quadaratisch, dann definiere dir
int n = die Länge;
und verwende n an den 4 benötigten Stellen

anderenfalls teste dein Programm auch mit anderen Arrays

--------

Methoden immer klein schreiben
 

techdevil

Aktives Mitglied
Java:
public static int spaltensummennorm(int[][]matrix_in){
		
		int result = 0;
		java.util.LinkedList<Integer> dump = new java.util.LinkedList<Integer>();
		int temp=0;
				
		for(int i=0;i<matrix_in[0].length;i++){
			for(int j=0;j<matrix_in.length;j++){
				temp+=java.lang.Math.abs(matrix_in[j][i]);
			}
			dump.add(temp);
			temp=0;
		}
		for(int i=0;i<dump.size();i++){
			
			if(dump.get(i)>result){result=dump.get(i);}
		}
		return result;
	}

Das müsste doch auch mit nichtquadratischen Matrizen gehen ?

EDIT: Das tut es auch. Der Knackpunkt war in der Tat der Betrag :lol:
 
Zuletzt bearbeitet:

Oben