return Fehler .class expected

Status
Nicht offen für weitere Antworten.

mad.21

Mitglied
Hallo,

ich hoffe ihr könnt mir bei meinem Problem helfen:

Java:
public int matrixMaxElement (int [][] matrix){
    int max = matrix[1][1];
    int fehler[][] = new int [][]{{-999999},{-999999}};
    for (int i =0;i<matrix.length;i++){
        for (int j =0; j<matrix[i].length;j++){
            if(matrix[i][j] != matrix[j][i]){
                return fehler[][];
            }         
            else{
                if (matrix[i][j] > max){
                    max = matrix[i][j];
                }
            }
        }
     
    }
    return max;
}

Für Zeile 7 bekomme ich immer eine Fehlermeldung und ich weiß nicht warum!

Der Sinn der 3., 6. und 7. Zeile soll sein: Zur Überprüfung, ob die beiden Zeilen wirklich gleich lang sind (lt. Aufgabenstellung)

Bitte helft mir.
 
und was genau sollst du zurückgeben .. int und int[][] sind 2 versch. dinge

hm edit: jaja erst lesen dann denken ^^ .. das maximale element.
was du prüfst ist glaube die Symmetrie der Matrix .. ist das gewollt? wenn du bei der Prüfung zufällig ne Matrix erwischt, die nicht n*n struktur hat, dann bekommst ne arrayIndexOutOfBoundsException
 
Zuletzt bearbeitet:
Das ganze Programm soll das größe Element einer beliebigen zweidimensionalen Matrix zurückgeben.

Der Fehlercode soll -999999 zurückgeben, falls die Zeilen der Matrix nicht alle gleich lang sind.
 
return fehler[][] geht nicht
der Methodenkopf soll wohl
Code:
public int[B][][][/B] matrixMaxElement (int [][] matrix){
heissen, und die Zeile
Code:
return fehler;

<edit>
Sorry, hab mich verguckt, nächste Vermutung
[JAVA=3]int fehler = -999999;[/code] und [JAVA=7]return fehler;[/code]
 
Zuletzt bearbeitet:
ne dachte ich auch erst ^^ ... aber unten gibt er ja im erfolgsfall max aus .. das fehlerding kannst du dir eigentlich sparen und gleich -9999999999 oder Integer.MIN_VALUE zurückgeben
 
Also der Methodenkopf ist so vorgegeben.

Und

return fehler;

klappt nicht, da Fehlermedlung "incompatible types -found int [][] but expected int"
 
quote mich selbst 😀

was du prüfst ist glaube die Symmetrie der Matrix .. ist das gewollt? wenn du bei der Prüfung zufällig ne Matrix erwischt, die nicht n*n struktur hat, dann bekommst ne arrayIndexOutOfBoundsException

hast vielleicht überlesen ... was meinst du dazu mad.21?
 
Sorry, hatte das wirklich überlesen.

Ja, ich prüfe die Symmetrie, weil ich gedacht habe, dass ich so die Aufgabenstellung "Überprüfen Sie, dass alle Zeilen der Matrix wirklich gleich lang sind" erfülle, also das hoffe ich zumindestens.

Aber ehrlich gesagt: Ich weiß nicht, ob das so richtig ist wegen arrayIndexOutOfBoundsException. Genau in solch einem Moment, soll er mir -999999 ausgeben.
 
Ja, da hast du recht. Muss ich erhlich zugeben.

Kannst du mir vielleicht sagen, wie ich überprüfen kann, ob die Anzahl der Elemente vom 1. [] und 2. [] gleich groß ist?
 
Java:
public class Test {
	
	public static void main(String[] args) {
		int[][] matrix = {{1,2},{3,4}};
		//int[][] matrix = {1,2};
		//int[][] matrix = {{1,2},{4}};
		int max = matrix[0][0];
		
		for(int i=0; i<matrix.length; i++) {
			if (! (matrix[i].length == matrix.length)) {
				System.out.println(Integer.MIN_VALUE);
				return;
			} else {
				//bestimme max bezueglich der Elemente aus matrix[i]
			}
		}
		
		//System.out.println(max);
	}
}

musst es nur noch berechnen 😀 .. du kannst spassenhalber mal die jeweiligen matrizen da oben probieren, und wirst sehen dass der MIN_VALUE angezeigt wird, weil Längen nicht passen

Die Sache mit der Exception ist die, dass du nicht auf den Index zugreifen kannst ohne das die Exception geworfen wird, das heisst du musst vor Prüfen auf Symmetrie oder Inhalt wissen, ob das Feld lang genug ist, um dir nich den Ablauf zu zerschiessen
 
Vielen vielen Dank diggaa1984, mein Programm funktioniert jetzt, bis auf ein Problem:

Wenn die Eingabe {{1,2},{3,4}} ist, zeigt er mir 4 an. - Ist ja richtig

Wenn die Eingabe {{1,2},{3,4,5}} ist, zeigt er mir -999999 an. - Ist ja richtig

Wenn die Eingabe {{1,2,5},{3,4,6}} ist, zeigt er mir -999999 an. - Und das ist ja falsch. Ich habe jetzt als Ausgabe 6 erwartet. Warum ist das so?

nochmal mein Code überarbeitet:

Java:
public int matrixMaxElement (int [][] matrix){
    int max = matrix[0][0];
    int fehler = -999999;
    for (int i =0;i<matrix.length;i++){
        for (int j =0; j<matrix[i].length;j++){
            if(matrix[i].length != matrix.length){
                return fehler;
            }         
            else{
                if (matrix[i][j] > max){
                    max = matrix[i][j];
                }
            }
        }
     
    }
    return max;
}
 
Okay,

und wieso kann ich nicht einfach

[JAVA=6] if(matrix.length != matrix[j].length);[/code]

schreiben?

Fehlermeldung "ArrayIndexOutOfBoundsException: 2" bei Eingabe von {{1,2,5},{3,4,6}}?

Das verstehe ich nicht.


Edit:
ist doch die Überprüfung, ob alle Zeilenlängen gleich lang sind oder?
 
Zuletzt bearbeitet:
i ist der Index der die Zeilen durchläuft
j ist der Index der die Spalten durchläuft
Deshalb bekommst Du für {{1,2,5},{3,4,6}}
--> j=2 --> ArrayIndexOutOfBounds
 
Weil wahrscheinlich einer der Indizies aus der Zeile kommt. Sprich 2 ist und eine 3. Zeile hast Du nicht.
 
Eine Lösungsmöglichkeit wäre folgende
Java:
public int matrixMaxElement(int[][] matrix) {
	int max = matrix[0][0];
	int fehler = -999999;
	int lineLen = matrix[0].length;
	for (int i = 0; i < matrix.length; i++) {
		if (lineLen != matrix[i].length)
			return fehler;
		for (int j = 0; j < matrix[i].length; j++) {
			if (matrix[i][j] > max) {
				max = matrix[i][j];
			}
		}
	}
	return max;
}
wobei solche Felder wie {{},{1, 2}} weiterhin eine ArrayOutOfBoundsException auslösen würden
 
Vielen Dank Michael...,

ich finds nur doof, dass ich da nicht von alleine drauf gekommen bin, ich könnte *****.

Aber was genau sagt folgendes aus:

[JAVA=4]int lineLen = matrix[0].length;[/code]

Heißt das, es wird am Anfang der Matrix angefangen zu zählen der Länge oder die Länge = 0 oder...?

Und das ich die Abfrage der Länge mal wieder an die falsche Stelle gesetzt habe (da Aufgabenstellung falsch verstanden); dafür könnt ich mich auch schwarz ärgern...

Aber trotzdem: Danke!
 
das liefert dir quasi die Länge der ersten Zeile .. wenn die Matrix eine n*n - Struktur hat ists ja egal, welche Zeile du da als Referenz nimmst
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben