Ergebnis einer Methode bei einer anderen verwenden

Aloushi

Mitglied
Hallo,
kann mir jemand sagen, wo genau mein Fehler liegt? Würde gerne einen double Array erhalten, bekomme jedoch folgendes in der Konsole: [D@2f92e0f4


Java:
public static void main(String[] args) throws Exception, NullPointerException {

        System.out.println(normalizeVector3D(new int[] { 2, 2, 2 }));
        System.out.println(vectorSum(new int[] { 2, 2, 2 }));
    }


Java:
public static double[] normalizeVector3D(int[] integerArray) throws Exception, NullPointerException {

        double result = vectorSum(integerArray);

        result = (Math.sqrt(result));
        result = Math.round(result * 1000.0) / 1000.0;

        

        double[] doubleArray = new double[integerArray.length];

        for (int i = 0; i < doubleArray.length; i++) {
            doubleArray[i] *= Math.round(result * 1000.0) / 1000.0;

        }

        return doubleArray;

    }

    public static int vectorSum(int[] x) throws Exception, NullPointerException {

        for (int i = 0; i < x.length; i++) {
            if (x[i] == 0 && x[i + 1] == 0 && x[i + 2] == 0 || x == null) {
                throw new Exception("Das übergeben Array ist ein Nullvektor oder das Array ist gleich null");
            }
        }

        int result = 0;
        for (int i = 0; i < x.length; i++) {
            result += x[i] * x[i];

        }
        return result;
    }
 
Das ist die Standard-String-Ausgabe eines Arrays. Wenn du eine lesbare Darstellung haben willst, nutz Arrays.toString(.....)
 
throw new Exception("Das übergeben Array ist ein Nullvektor oder das Array ist gleich null");
An dieser Stelle kann x niemals null sein, 2 Zeilen vorher bei x.length würde in dem Fall bereits eine NullPointerException ausgelöst.
Eine NullPointerException deklariert man auch nicht in der Methode, da es eine RuntimeException ist.
 
Das ist die Standard-String-Ausgabe eines Arrays. Wenn du eine lesbare Darstellung haben willst, nutz Arrays.toString(.....)
Aber ich nutze doch gar keinen String Array? weshalb sollte es mir denn so angezeigt werden? mit Arrays.toString(...) funktioniert es aber auch nicht, da ich dann den rückgabetyp ändern müsste oder nicht?
 
Gar nicht gesehen. Ein throws Exception hat eigentlich auch nie was im Methodenkopf zu suchen (Maximal bei Unit-Tests)
 
An dieser Stelle kann x niemals null sein, 2 Zeilen vorher bei x.length würde in dem Fall bereits eine NullPointerException ausgelöst.
Eine NullPointerException deklariert man auch nicht in der Methode, da es eine RuntimeException ist.
die ausnahmen können erst mal ignoriert werden. mit denen habe ich mich in der methode noch nicht beschäftigt. habe sie nur hingeschrieben, damit ich es später nicht vergesse^^
 
Aber ich nutze doch gar keinen String Array? weshalb sollte es mir denn so angezeigt werden? mit Arrays.toString(...) funktioniert es aber auch nicht, da ich dann den rückgabetyp ändern müsste oder nicht?
Vergleich mal folgende zwei Ausgaben

Java:
System.out.println(new int[] { 2, 2, 2 });
System.out.println(Arrays.toString(new int[] { 2, 2, 2 }));

Siehe auch hier: https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Arrays.html#toString(int[])

Das formatiert dir nur das Arraay hübsch - egal welches Array
 
Vergleich mal folgende zwei Ausgaben

Java:
System.out.println(new int[] { 2, 2, 2 });
System.out.println(Arrays.toString(new int[] { 2, 2, 2 }));

Siehe auch hier: https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Arrays.html#toString(int[])

Das formatiert dir nur das Arraay hübsch - egal welches Array
da bekomme ich den inhalt^^ aber habe echt keine ahnung, wo ich im code was umändern muss, um tatsächlich den inhalt zu bekommen ohne den rückgabewert zu verändern
 
Du musst deinen Rückgabewert nicht ändern. Du bekommst ein Array zurück - das Array, was du zurückbekommst steckst du in Arrays.toString rein und das was da zurückkommt in System.out.println
 
okey aber dann bleibt ja bei return "doubleArray; stehen? ist das dann nicht unschön ein mal die referenzen und ein mal den inhalt zu bekommen?
 
okey aber dann bleibt ja bei return "doubleArray; stehen? ist das dann nicht unschön ein mal die referenzen und ein mal den inhalt zu bekommen?
Warum? Wenn du ein Objekt - egal was - direkt ausgibst, kommt in der Regel eine interne Darstellung raus Das ist selten die Darstellung, die man haben will.

In den meisten Fällen kann man nicht das Objekt einfach ausgeben, sondern muss es in eine geeignete Darstellung überführen. Die kann man selber schreiben - oder wie im Falle von Arrays, bereits vorhandene Hilfsmethoden verwenden, die eine schönere Darstellung liefern.
 
oke vielen Dank!

kann mir jemand noch sagen, was genau hier falsch ist?
double[] doubleArray = new double[integerArray.length];

würde da eigentlich [2.0, 2.0, 2.0] raushaben wollen anstatt [0.0, 0.0, 0.0]
 
Da solltest du da auch 2.0 reinschreiben. Die Zeile sagt erzeuge mir ein double Array das genau so viel Platz hat, wie die Läng des integer Arrays. Mehr nicht. Der inhalt aus dem Integer Array wird nicht kopiert - warum auch. Das müsstest du selber machen.
 

Zurück
Oben