Entwickler-Ecke

Basistechnologien - Kleinster und größter Wert Array mehrdimensionales Array


sebastian1234 - Mo 24.03.14 19:32
Titel: Kleinster und größter Wert Array mehrdimensionales Array
Noch eine kurze Frage...

Wie kann ich bei einem Mehrdimensionalen Array den kleinsten und größten Wert finden und zwar in der inneren Schleife (j=1)?
Folgender Ansatz für kleinsten Wert...


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
int minimal; // Frage wie den minimal Startwert festlegen?

for (int i = 0; i < kunde.Length; i++)
{
   for (int j = 1; j < kunde[0].Length; j++)
     {
        if(kunde[j] < minimal)
        {
           minimal = kunde[j];
        }
        // Ausgabe kleinster Wert (bzw größter Wert)
     }
}


Vielen Dank!


Christian S. - Mo 24.03.14 19:52

Hi!

Der Wert kunde[j] ist ein Array, das kannst du weder mit einem Integer vergleichen, noch diesem zuweisen. Daher wird es wohl eher sowas wie kunde[i][j] sein.

Grüße
Christian

P.S.: minimal solltest Du noch intialisieren, z.B. mit int.MaxValue.


sebastian1234 - Di 25.03.14 12:46

Morgen!

Die Werte im Array sind 85, 2, 75, 1!

Mit dieser Schleife möchte ich den kleinsten Wert herausbekommen...

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
int minimal = int.MinValue;
for (int i = 0; i < kunde.Length; i++)
  {
    for (int j = 1; j < kunde[0].Length; j++)
      {
        if (kunde[i][j] < minimal)
        {
          minimal = (int)kunde[i][j];
        }
      }
}Console.WriteLine("Kleinster Wert: "+minimal)


Ausgabe ist allerdings -2147483648
Eigentlich müsste hier 1 herauskommen...

Mit dieser Schleife möchte ich den größten Wert herausbekommen...


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
int maximal = int.MaxValue;
for (int i = 0; i < kunde.Length; i++)
  {
    for (int j = 1; j < kunde[0].Length; j++)
      {
        if (kunde[i][j] < maximal)
        {
          maximal = (int)kunde[i][j];
        }
      }
}Console.WriteLine("Größter Wert: "+maximal)


Ausgabe hier ist 1...
Also der korrekte Wert für min!

Wo ist der Fehler?


FinnO - Di 25.03.14 12:49

Wenn du das Maximum herausfinden möchtest, sollte der Startwert der kleinstmögliche Wert sein und umgekehrt. ;)


C#-Quelltext
1:
int minimal = int.MaxValue;                    


sebastian1234 - Di 25.03.14 13:22

Ok danke! Es funktioniert!

Aber ein kleines weiteres Problem ist entstanden.
Am Ende der Methode wird die Berechnung


C#-Quelltext
1:
double standardisierungKundeZwei = kunde[i][j] - minimal * (1 / (maximal - minimal));                    


durchgeführt.
Aber irgendwie wird an dieser Stelle nichts berechnet, sondern es werden einfach die Werte im Array ausgegeben!
Warum?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
public static void test(double[][] kunde)
        {
            double[][] kundeStandardisiert = new double[kunde.Length][];
            for (int i = 0; i < kunde.Length; i++)
            {
                kundeStandardisiert[i] = (double[])kunde[i].Clone();
            }

            int maximal = int.MinValue;
            
            for (int i = 0; i < kunde.Length; i++)
            {
                for (int j = 1; j < kunde[0].Length; j++)
                {
                    if (kunde[i][j] > maximal)
                    {
                        maximal = (int)kunde[i][j];
                    }    
                }
            } Console.WriteLine("Grˆflter Wert: " + maximal);

            int minimal = int.MaxValue;

            for (int i = 0; i < kunde.Length; i++)
            {
                for (int j = 1; j < kunde[0].Length; j++)
                {
                    if (kunde[i][j] < minimal)
                    {
                        minimal = (int)kunde[i][j];
                    }

                }
            } Console.WriteLine("Kleinster Wert: " + minimal);

            for (int i = 0; i < kunde.Length; i++)
            {
                double unternehmensBezeichnung = kunde[i][0];
                Console.WriteLine("Unternehmen " + unternehmensBezeichnung);

                for (int j = 1; j < kunde[i].Length; j++)
                {
                    double standardisierungKundeZwei = kunde[i][j] - minimal * (1 / (maximal - minimal));
                    
                    
                    Console.WriteLine(standardisierungKundeZwei);
                    
                    //kundeStandardisiert[i][j] = standardisierungKundeZwei;
                }
            }
            //return kundeStandardisiert;
        }


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Christian S. - Di 25.03.14 13:38

1 / (maximal - minimal) dürfte meistens 0 sein, weil Du eine Integer-Division durchführst. Versuchs mal mit 1.0 / (maximal - minimal)


sebastian1234 - Di 25.03.14 14:29

Ich musste um die 1.0 noch eine Klammer setzten dann hat es geklappt! Vielen Dank!


C# - So 30.03.14 00:12


C#-Quelltext
1:
2:
maximal = kunde.Max(i => i.Max());
minimal = kunde.Min(i => i.Min());


Sollte auch funktionieren wenn ich mich nicht irre (habs nicht getestet). Dann sparst du dir die beiden Schleifen.