# Vektoren in Java



## SnowDragon (1. Dez 2016)

Hallo,
Ich habe die folgende Aufgabe zu lösen: 

In dieser Aufgabe sollen Sie eine n-dimensionale Vektorklasse VectorND um die notwendigen Methoden für typische Vektor-Arithmetik erweitern. Laden Sie hierzu die Datei VectorND.java von der Übungsseite herunter. Sie können davon ausgehen, dass alle übergebenen Vektoren und Arrays nicht null sind. Deklarieren Sie keine eigenen Klassen- und Instanzvariablen. 
Implementieren Sie die folgenden Methoden:

VectorND(int dim). Implementieren Sie zunächst den Konstruktor der Klasse VectorND. Als Parameter wird die Anzahl der Dimensionen dim übergeben. Stellen Sie hier sicher, dass Sie den notwendigen Speicherbereich für die Dimensionen bereit stellen. Sie können annehmen, dass dim ausschließlich positive Werte (>0) annimmt.

VectorND(double[] initData) ist eine weitere Variante des Konstruktors, mit der zusätz- lich ein Array aus Gleitkommazahlen dazu verwendet wird, die Daten im Vektor zu initia- lisieren. Beachten Sie, dass der Aufrufer das Array initData später ändern können soll, ohne dass dadurch der Vektor verändert wird.

int getDimension() gibt die Anzahl der Dimensionen des Vektors zurück.

void init(double[] initData) initialisiert den Vektor mit den übergebenen Daten im Array. Es soll keine Initialisierung durchgeführt werden, falls die Größe des Arrays nicht der Dimensionsgröße entspricht. Beachten Sie, dass der Aufrufer das Array initData später ändern können soll, ohne dass dadurch der Vektor verändert wird.

void multiply(double m) multipliziertdenVektormiteinemskalarenWertm.Beiderska- laren Multiplikation eines Vektors wird jedes Element (jeder Dimension) mit dem skalaren Wert multipliziert. 

das ist der Code:

```
public class VectorND {

    // DIESE VARIABLE NICHT VERAENDERN
    public double[] data;

    public VectorND (int dim) {
        //TODO
        double[] vector = new double[dim]; //stimmt das?
    }

    public int getDimension() {
        //TODO
        return ;
    }

    public VectorND (double[] initData) {
        //TODO
        double[] vector = initData; //stimmt das?
    }

    public void init(double[] initData) {
        //TODO
    }

    public void multiply (double m) {
        //TODO
    }

    public double dot (VectorND vec) {
        //TODO
        return 0;
    }

    public void add (VectorND vec) {
        //TODO
    }

    public double norm() {
        //TODO
        return 0;
    }

    public void normalize() {
        //TODO
    }

    //DIESE METHODE BITTE NICHT VERAENDERN
    public double getValueAt(int i)
    {
        return data[i];
    }


    //DIESE METHODE BITTE NICHT VERAENDERN
    public static void print(VectorND vec)
    {
        System.out.print("VectorND with " + vec.getDimension() +  " dimensions: ( ");
        for (int i=0;i<vec.getDimension();++i)
        {
            if (i!=0) System.out.print(" , ");
            System.out.format("%.3f", vec.getValueAt(i));
        }
        System.out.println(")");
    }

    //DIESE METHODE BITTE NICHT VERAENDERN
    public static void main(String[] args)
    {
        System.out.println("\n# Vectors\n-------------------------------------");
        VectorND v1 = new VectorND(2);
        double[] data = new double[] {1.0, 2.0};
        v1.init( data );
        print(v1);

        VectorND v2 = new VectorND(new double[]{ 3.0, 3.0, 3.0} );
        print(v2);

        System.out.println("Multiply v1 by 3.");
        v1.multiply(3);
        print(v1);

        VectorND v3 = new VectorND(new double[]{4.0, 8.0});
        print(v3);

        System.out.println("Scalar product between v1 and v2: " + v1.dot(v2));
        System.out.println("Scalar product between v1 and v3: " + v1.dot(v3));
        System.out.println("Scalar product between v3 and v1: " + v3.dot(v1));


        System.out.println("Normalize v2.");
        v2.normalize();
        print(v2);

        System.out.println();
        System.out.println("-------------------------------------\n# Finished Vectors\n");
    }

}
```

Aber wie soll ich die Methoden implementieren, ohne Klassen/ oder Instanzvariablen zu verwenden?


----------



## mrBrown (1. Dez 2016)

SnowDragon hat gesagt.:


> Aber wie soll ich die Methoden implementieren, ohne Klassen/ oder Instanzvariablen zu verwenden?


Wie kommst du drauf, dass Instanzvariablen nicht verändert werden dürfen? In der Aufgabenstellung steht's nicht.


----------



## SnowDragon (1. Dez 2016)

In der Aufgabenstellung steht: Deklarieren Sie keine eigenen Klassen- und Instanzvariablen. Welche sollte ich denn dann verwenden?


----------



## mrBrown (1. Dez 2016)

SnowDragon hat gesagt.:


> In der Aufgabenstellung steht: Deklarieren Sie keine eigenen Klassen- und Instanzvariablen. Welche sollte ich denn dann verwenden?


das Vorhandene Array - deklarieren meint neue hinzufügen, das brauchst du nicht, weil es das ja schon gibt.


----------



## SnowDragon (1. Dez 2016)

du meinst "data"? Die darf ich doch nicht verwenden


----------



## mrBrown (1. Dez 2016)

SnowDragon hat gesagt.:


> du meinst "data"? Die darf ich doch nicht verwenden



Doch, nur nicht einfach verändern, also entfernen, umbenennen oder dergleichen, einen Wert zuweisen aber schon.


----------



## SnowDragon (1. Dez 2016)

Bist du sicher? Wenn das so ist, versuche ich das mal


----------

