Kombination von Array-Elementen

Guten Tag,

ich bin in meinem aktuellen Programm auf ein Problem gestoßen, vielleicht könnte ihr mir dabei einen Tipp geben.

Hier ein Ausschnitt aus dem Quellcode:


daten[0] = new double[] { 10.0, 20.0}
daten[1] = new double[] { 30.0, 20.0}
daten[2] = new double[] { 50.0, 40.0}


static double Berechnung( double[][] daten)
{
for ( int i = 0; i < daten.length; ++i)

Formel = ( [daten[0] 1.Zahl] - [daten[1] 1.Zahl] ) + [daten[0] 2.Zahl] -  [daten[1] 2.Zahl]
}

Wie schaffe ich es das die korrekten Werte des Arrays in die Formel kommen, also so wie ich das in der Formel beschrieben habe? Die Verteilung ist momentan mein Problem.

Und das für alle Möglichkeiten allerdings nicht doppelt (also nicht “Daten0 zu Daten1” und dann noch “Daten1 zu Daten0”)!

Wenn ich das richtig sehe gibt es in diesem Fall nur 3 Möglichkeiten…

daten0 zu daten1
daten0 zu daten2
daten1 zu daten2

Ich würde mich sehr freuen wenn ihr mir einen Tipp geben würdet bzw. einen Vorschlag.

Vielen dank und viele Grüße!

Du fängt mit einer Zählvariablen bei 0 an … durchläufst das Array ab der Zählvariablen + 1 durch bis die Zählvariablen gleich Größe des Array -1 ist. So bekommst du alle Kombinationen genau EINMAL

Okay die Antwort war etwas unverständlich :smiley:
ich kann leider nicht mehr editieren:

Dein Vorgehen:

→ Zählvariable = 0
Du durchläufst nun ab Zählvariable + 1 das Array bis zum Ende. (So bekommst du alle Kombinationen 0 - 1, 0 -2 , etc. )
Dann zählst du die Zählvariable hoch und zählst wieder durch.

Das ganze machst du bis die Zählvariable Arraygröße - 1 angekommen ist, das wäre dann die letzte Zahl im Array.

So bekommst du alle Kombinationen genau EINMAL

Ich habe es jetzt mehrfach versucht komme aber irgendwie zu keinem Ergebnis. Besteht die Möglichkeit das du vielleicht einen Pseudocode oder so angeben kannst?

was hast du denn versucht, ein wenig von dir wäre nett,
allein eine Schleife mit i wie angefangen aber nicht wirklich (i wird nicht verwendet), wäre schon ein Schritt,
überlege was du mit einer Schleife machen könntest

nicht schon alles mit der einen Schleife lösen, aber ein wenig, i läuft durch, irgendwas mit daten**, soweit sei es nicht viel verraten, mit was könntest du das kombinieren?
und sei es auch nur testweise/ teilweise/ darf auch etwas zuviel, falsche Kombinationen enthalten, später noch weiter aufräumen,
irgendeine Idee für irgendwas was tatsächlich kompilierbarer Java-Code ist?

Nur so aus Neuiger. Was soll da eigentlich rauskommen?
Formel = (-20.0)
Formel = (-60.0)
Formel = (-40.0)

Oder mehr in die Richtung -20 + -60 + -40?

Ja okay also ich habe folgenden Code geschrieben allerdings in C#!

[CSHARP]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SingleLinkageVerfahren
{
class ArrayTest
{
static void Main(string[] args)
{
double[][] zahlen = new double[3][];

        zahlen[0] = new double[] { 50.0, 100.0 };
        zahlen[1] = new double[] { 100.0, 50.0 };
        zahlen[2] = new double[] { 200.0, 50.0 };

        //double i = zahlen[0][1];
        //Console.WriteLine(i);
        arrayAbfrage(zahlen);
        Console.ReadLine();
    }

    static void arrayAbfrage(double[][] zahlen)
    {
        for (int q = 0; q < zahlen.Length; ++q)
        {
            
                double i = zahlen[q][0];
                double o = zahlen[q][1];

                for (int ¸ = 0; ¸ < zahlen.Length; ++¸)
                {
                    double b = zahlen[¸][0];
                    double z = zahlen[¸][1];
                    double formel = 0;

                    formel = i + b + o + z;

                    Console.WriteLine(formel);
                }
            
              
            
        }
        
    }
}

}
[/CSHARP]

Die Formel hat keinen Sinn soll aber nachher durch die Euklidische Distanz Formel ersetzt werden. Dort benötigt man auch 4 Werte.

das ist doch ziemlich gut, in Java quasi genauso zu schreiben, inzwischen nicht mehr komplett unklar?

die innere Schleife muss wie gesagt bei q oder q+1 beginnen, genauer austesten,
das ist hier der Trick um nicht erst 0 mit 5 und später einmal 5 mit 0 zu kombinieren

aber das sollte eigentlich kaum mehr die Frage sein wenn man so einen Code hat…,
mit den Auslassungen sieht es eher nach Vorgabe und Rätsel zur Befüllung aus, na wie auch immer

Das ist doch die Manhattan-Metrik, oder? [edit]nein, dafür fehlen Betragszeichen[/edit]

Von deinem geposteten Code ist es doch nur noch ein winziger Schritt zu gültigem Java-Code. Das sieht selbst so schon fast so aus, als könnte das kompilieren. Viel mehr als zahlen.length und ein bisschen andere Syntax bei der Klasse und schon bist du fertig.