Kleinste Zahl in einem [][]Array

papanurgle

Mitglied
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:

Java:
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
Java:
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
 

papanurgle

Mitglied
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.
 
Zuletzt bearbeitet:

Final_Striker

Top Contributor
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?
 

kuku

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

Java:
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

Top Contributor
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

Mitglied
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.

Stimme dir in beiden Punkten zu.
 

papanurgle

Mitglied
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:
 

Oben