# Kleinste Zahl in einem [][]Array



## papanurgle (10. Aug 2010)

Hallo Leute,

ich möchte ein [60][3]-Array nach dem kleinsten Wert durchsuchen und komme da trotz Google und Co. auf keinen grünen Zweig. Zwei Ansätze habe ich bereits ausprobiert und verstehe nicht, warum es bisher nicht funktioniert bzw. wo der Fehler ist. Hier mein bisheriger Code:


```
double[][]A = new double [60][3];	// Array initialisieren, Array richtig?
int p = 0;
for (int j = 2; j < 61; j++){
double db = excelFileRead.getCellNumericValue("Tabelle2!D"+(j));//db bekommt zahlenwerte aus einer excel-datei zugewiesen
A[p][0] = db;
p = p+1;}

for (int a = 2; a < 61; a++){
double dbl = excelFileRead.getCellNumericValue("Tabelle2!E"+(a));//st bekommt Zelleninhalt zugewiesen
A[p][1] = dbl;}

for (int b = 2; b < 61; b++){
double dble = excelFileRead.getCellNumericValue("Tabelle2!F"+(b));//st bekommt Zelleninhalt zugewiesen
A[p][2] = dble;}


/**double[][] zahlen = A; 		// Suche nach kleinstem Wert starten
double min = Double.MAX_VALUE;
for (int ii = 0; ii < 2; ii++){
for (int i = 0; i < zahlen.length; i++) { // da mehrstufiger array, muss [i][j] also über 2 aufzählende variablen verfügen
	
  if (zahlen[i][ii] < min){
  min = zahlen[i][ii];}
  
  	
  
  }}

kleinsteZahl = min;*/

double[][] zahlen = A;
double min = Double.MAX_VALUE;
Arrays.sort(zahlen);
min = zahlen[0][0];

kleinsteZahl = min;
```

Der Wert kleinsteZahl verändert sich leider nicht.
Ich hoffe ihr könnt mir da weiterhelfen!

Kann ich für diesen Fall eigentlich auch auf die 
	
	
	
	





```
for (double Wert : Array)
```
 zurückgreifen?

Da dies mein erster Post hier ist, bitte ich euch mir eventuelle Fehler bei der Beschreibung des Problem o.ä. zu verzeihen 


Grüße,

papanurgle


----------



## Final_Striker (10. Aug 2010)

Der auskommentierte Teil sollte eigentlich funktionieren.


----------



## papanurgle (10. Aug 2010)

Der Wert kleinsteZahl ist initial auf 0 gesetzt und bleibt es auch nach Ablauf meines Codes. Bei den eingelesenen Excel-Werten gibt es jedoch keine 0. Von daher versteh ich den Fehler nicht wirklich.

Noch etwas zu meinem bisherigen Code:
Gibt es eigentlich eine Möglichkeit alphanumerisch durchzuiterieren? Also mittels einer for-Schleife von "D" bis "U" zu laufen? Habe es vorläufig mit 3 versch. for-Schleifen gelöst.


----------



## Final_Striker (10. Aug 2010)

In deiner 2. und 3. for-Schleife oben, änderst du das p nicht.

Was enthält dein Array denn nach den ersten 3 for-Schleifen? Wird das überhaupt gefüllt?


----------



## XHelp (10. Aug 2010)

```
for ( char ch = 'D';  ch <= 'U';  ch++ ) {
 //machwas
}
```


----------



## kuku (10. Aug 2010)

Was spricht dagegen die kleinste Zahl direkt beim einlesen zu ermitteln und alles in eine Schleife zu packen. Beispiel (nicht getestet): 


```
final double[][] A = new double[60][3];

	double minValue = Double.MAX_VALUE;

	for (int j = 2, i = 0; j < A.length; j++, i++) {
	    final double db = excelFileRead.getCellNumericValue("Tabelle2!D" + (j));
	    final double dbl = excelFileRead.getCellNumericValue("Tabelle2!E" + (j));
	    final double dble = excelFileRead.getCellNumericValue("Tabelle2!F" + (j));

	    if (db < minValue) {
		minValue = db;
	    }

	    if (dbl < minValue) {
		minValue = dbl;
	    }

	    if (dble < minValue) {
		minValue = dble;
	    }

	    A[i][0] = db;
	    A[i][1] = dbl;
	    A[i][2] = dble;

	}

	System.out.println(minValue);

    }
```


----------



## Marco13 (10. Aug 2010)

Abgesehen von "Separation of Concerns" eigentlich nichts (später braucht man noch das Maximum, den Durchschnitt, die Standardabweichung... und dann will man mal wieder doch NUR einlesen).

if (db < minValue) {  minValue = db; }
kann man auch als
minValue = Math.min(minValue, db);
schreiben.


----------



## kuku (10. Aug 2010)

Marco13 hat gesagt.:


> Abgesehen von "Separation of Concerns" eigentlich nichts (später braucht man noch das Maximum, den Durchschnitt, die Standardabweichung... und dann will man mal wieder doch NUR einlesen).
> 
> if (db < minValue) {  minValue = db; }
> kann man auch als
> ...



Stimme dir in beiden Punkten zu.


----------



## papanurgle (11. Aug 2010)

Erstmal möchte ich mich herzlich für die Unterstützung bedanken! Ihr habt mir echt weitergeholfen. 

Habe jetzt die Implementierung von kuku übernommen und sie funktioniert. Lediglich eine } war überflüssig 

In meinem Code hatte sich tatsächlich ein dummer Fehler eingeschlichen. Wie ihr richtig erkannt habt, wurde die interne Variable p nicht richtig hochgezählt. Asche über mein Haupt dafür :shock:


----------

