# Größtes Element eines Arrays



## Nooblearning (12. Dez 2009)

Guten Tag,

zu allererst möchte klar stellen das ich in diesem Gebiet noch ein Anfänger bin ^^, also Nachsicht haben...
ich habe mein Programm soweit hinbekommen das er mir den Größten Element und die zeile wo sich die Größten Elemente befinden ausgibt. Mein Problem ist aber das ich auch gerne die Spalte ausgeben möchte wo sich das Größte Element befindet.
Könnte jemand mir in dieser Hinsicht helfen...
hier erst mal mein Programm Code:
[JAVA=0]class aufg7 {
	public static void max(int arr[][]){
		int get;
		for(int zeile=0;zeile<arr.length;++zeile){
			get=arr[zeile][0];
			for(int spalte=0;spalte<arr[zeile].length;++spalte){
				if(arr[zeile][spalte]>get){
					get = arr[zeile][spalte];

			}

		}

		System.out.println("max befindet sich in der zeile " +
							+zeile+" und spalte "+" mit den wert "+get);
	}

}
	public static void main(String[] args) {
	int[][] arr = {{1,2,3,4}, {5,6,7},{5,6,9}};
	max(arr);
	}

}
[/code]


----------



## madboy (12. Dez 2009)

Zwar keine Lösung für deine Frage aber du hast ein Problem mit deinen Testdaten. Es ist Zufall, dass die richtige Lösung ausgegeben wird.
Versuch mal mit

```
int[][] arr = {{9,2,3,4}, {5,6,7},{5,6,6}};
```
, sollte "1" raus kommen 

EDIT: Äh. Kannst du noch Mal genau beschreiben, was du willst? Soll pro Zeile das größte Element ausgegeben werden oder das insgesamt größte Element mit Zeile und Spalte?


----------



## Nooblearning (12. Dez 2009)

@madboy

also auch mit den zahlen die ich ausprobieren soll kommt das richtige raus...^^

@an alle
also zunächst beschreibe ich mal genauer was ich will bzw. machen soll:
Prgrammieren Sie eine Klassenmethode max die ein zweidimensionales integer Array übergeben bekommt und die Zeile und Spalte auf dem Konsole ausgibt, in der sich der größte Wert des übergebenes Arrays befindet.

Ich habe die Aufgabe so intepretiert das ich in jeder Zeile den Größten Element ausgeben soll, ich finde das es auch in der Aufgabenstellung nicht klar definiert ist.


----------



## madboy (12. Dez 2009)

Ich finde das recht klar definiert. Du sollst das größte Element des gesamten zweidimensionalen Arrays suchen und die Zeile und Spalte desjenigen ausgeben. Ist eigentlich recht einfach. Dort wo du dir das größte Element merkst, musst du nur einbauen dass dort auch die aktuelle Zeile und Spalte gespeichert werden.


----------



## Nooblearning (12. Dez 2009)

also ist meine Lösung nicht richtig ? oder muss ich das größte Element von den Gesamten {{1,2,3,4}, {5,6,7},{5,6,9}}; das wäre ja dann 9 oder nicht ?


----------



## madboy (12. Dez 2009)

Genau, die richtige Ausgabe wäre dann:
max befindet sich in der zeile 3 und spalte 3 mit den wert 9

EDIT (erst denken, dann posten): Bis auf die Ausgabe der Zeilen und Spalten passt dein Programm


----------



## Nooblearning (12. Dez 2009)

danke madboy für die info, naja manchmal ist man etwas unachtsam was die Aufgabe angeht  kommt vielleicht daher das man zuviel denkt bzw. zuwenig haha
ich werde mich mal damit  gleich befassen und dann den richtigen Code noch mal Posten, falls ich fragen habe stelle ich sie dann ^^


----------



## Nooblearning (12. Dez 2009)

irgendwie schaffe ich das nicht das er von den Gesamten Zeilen den Größten Element ausgibt hat vielleicht einer ne Idee ?
Danke


----------



## faetzminator (13. Dez 2009)

(nur im Browser getippt, ungetestet)

```
public static void max(int arr[][]) {
    int max = Integer.MIN_VALUE;
    for (int[] subArr : arr) {
        for (int val : subArr) {
            if (val > max) {
                max = val;
            }
        }
    }
    return max;
}
```


----------



## Nooblearning (13. Dez 2009)

@faetzminator 

was bedeutet das "Integer.MIN_VALUE" ? Das Problem ist das der Prof. eine Lösung will ohne sowas zu benutzen ....


----------



## eRaaaa (13. Dez 2009)

```
public static void max(int arr[][]) {
	int zeile = 0;
	int spalte = 0;
	int max = arr[0][0];
	for (int i = 0; i < arr.length; i++) {
	    for (int j = 0; j < arr[i].length; j++) {
		if (arr[i][j] > max) {
		    max = arr[i][j];
		    zeile = i;
		    spalte = j;
		}
	    }
	}
	System.out.println("Max: " + max + ", in Zeile " + zeile
		+ " und Spalte " + spalte);
    }
```


----------



## Nooblearning (13. Dez 2009)

@eRaaaa
WOW einfach genial, wäre da nicht so drauf gekommen, das problem habe ich immer...^^, deshalb üben üben 
dürfte ich fragen wie lange du schon Java machst ?
vielen Dank


----------



## Nooblearning (13. Dez 2009)

ich merke grad das ich die Lösung in meinen Händen hatte hätte einfach die get zuweisung unter die 2. for schleife und dann die abfrage machen müssen, oh man wie konnte ich das nur übersehen , aber danke nochmal an eRaaa dann der Lösung ist mir jetzt klar geworden wie arrays mit for schleifen argieren....


----------



## faetzminator (13. Dez 2009)

Nooblearning hat gesagt.:


> was bedeutet das "Integer.MIN_VALUE" ? Das Problem ist das der Prof. eine Lösung will ohne sowas zu benutzen ....



Die kleinste Zahl, welche in einem int platz hat. Natürlich kann man da auch eRaaaa's Teil [c]int max = arr[0][0][/c] verwenden. Das Wirft einfach eine AIOOBException, falls [c]arr.length == 0 || arr[0].length == 0[/c]


----------



## eRaaaa (13. Dez 2009)

hm, nicht eher eine NPE ?
(die dann übrigens bei deiner abfrage auch geworfen wird)


----------



## faetzminator (13. Dez 2009)

Eine NPE würde nur geworfen, wenn [c]arr == null || arr[0..n-1] == null[/c] wär, sowohl bei dir als auch bei mir.


----------

