Autor Beitrag
sebastian1234
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Mo 24.03.14 19:32 
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...

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
sebastian1234 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: 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...
ausblenden 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...

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Di 25.03.14 12:49 
Wenn du das Maximum herausfinden möchtest, sollte der Startwert der kleinstmögliche Wert sein und umgekehrt. ;)

ausblenden C#-Quelltext
1:
int minimal = int.MaxValue;					
sebastian1234 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Di 25.03.14 13:22 
Ok danke! Es funktioniert!

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

ausblenden 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?

ausblenden volle Höhe 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
sebastian1234 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Di 25.03.14 14:29 
Ich musste um die 1.0 noch eine Klammer setzten dann hat es geklappt! Vielen Dank!
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 30.03.14 00:12 
ausblenden 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler