Erste Schritte Berechnung der Summe zweier Arrays

kuschipe

Mitglied
Guten Tag,

ich verzweifle mittlerweile seit Tagen an einer Aufgabe aus der Uni und ich dachte vielleicht bekomme ich hier Hilfe. Wir haben den folgenden Teil eines Programmcodes bekommen und sollen nun Fehler suchen, berichtigen und sagen, was das Programm eigentlich machen soll.

Java:
public class UE8Aufgabe2
{
    public static float[] min(float v1, float v2) {
        return v1 <= v2 ? v1 : v2;
    }
 
    public static float[] summe(float[] v1, float[] v2) {
        float[] summe = new float[min(vek1.length,vek2.length)];
        for (int i=0; i<summe.length; i++)
        summe[i] = vek1[i] + vek2[i];
        return summe;
    }
 
    public static void main(String[] args) {
        float[] vek1 = {2.3F, 3.4F, -3.4F};
        float[] vek2 = {4.5F, 2.0F, 0.0F, 8.4F};
        float[] res = summe(vek1, vek2);
    }
}

Meine Lösungsansätze und Probleme:
- v1/v2 etc. sollten in vek1/vek2 umbenannt werden.
- ich schätze das Programm soll die Summe von zwei Arrays ausrechnen und für die Ergebnisse einen neuen Array anlegen.
- ich habe keinerlei Ahnung wofür das "?" in der return-Anweisung steht.
- ich bekomme mannigfaltige Fehlermeldungen die ich leider nicht so wirklich im Stande bin zu interpretieren und einen Lösungsansatz daraus zu schließen.

Hat von Euch vielleicht noch jemand einen Rat wie ich auf die Lösung kommen könnte?

Beste Grüße!
 
Zuletzt bearbeitet:
- ich habe keinerlei Ahnung wofür das "?" in der return-Anweisung steht.
Also das Fragezeichen ist Teil des ternären Operators
https://javabeginners.de/Schleifen_und_Verzweigungen/Ternaerer_Operator.php

- ich bekomme mannigfaltige Fehlermeldungen die ich leider nicht so wirklich im Stande bin zu interpretieren und einen Lösungsansatz daraus zu schließen.

Am besten du postest auch die Fehlermeldungen.
 
Die Fehlermeldungen die Eclipse mir ausgibt sind folgende:

Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    vek1 cannot be resolved to a variable
    vek2 cannot be resolved to a variable
    vek1 cannot be resolved to a variable
    vek2 cannot be resolved to a variable

    at UE8Aufgabe2.summe(UE8Aufgabe2.java:8)
    at UE8Aufgabe2.main(UE8Aufgabe2.java:17)

Habe jetzt ein paar Sachen geändert und er kompiliert jetzt, ich versteh allerdings jetzt erst recht nicht was hier passiert..

Java:
public class UE8Aufgabe2
{
    public static int min(float vek1, float vek2) {
        return (int) (vek1 <= vek2 ? vek1 : vek2);
    }
   
    public static float[] summe(float[] vek1, float[] vek2) {
        float[] summe = new float[min(vek1.length,vek2.length)];
        for (int i=0; i<summe.length; i++) {
        summe[i] = vek1[i] + vek2[i];}
        return summe;
    }
   
    public static void main(String[] args) {
        float[] vek1 = {2.3F, 3.4F, -3.4F};
        float[] vek2 = {4.5F, 2.0F, 0.0F, 8.4F};
        float[] res = summe(vek1, vek2);
    }
}
 
Zuletzt bearbeitet:
vek1 und vek2 werden in der main-Methode deklariert, dadurch kennt die Methode "summe" diese Variablen nicht. Man müsste vek1 und vek2 also zu Attributen der Klasse machen oder sie per Parameter der Methode übergeben.
Aber das hast du ja schon selbst geschrieben (Umbenennung v1/v2).
 
Ja genau.. Ich hab das jetzt nochmal umgeschrieben auf:
Java:
public class UE8Aufgabe2
{
    public static float[] min(float vek1, float vek2) {
        return vek1 <= vek2 ? vek1 : vek2;
    }
    public static float[] summe(float[] vek1, float[] vek2) {
        float[] summe = new float[min(vek1.length,vek2.length)];
        for (int i=0; i<summe.length; i++)
        summe[i] = vek1[i] + vek2[i];
        return summe;
    }
    public static void main(String[] args) {
        float[] vek1 = {2.3F, 3.4F, -3.4F};
        float[] vek2 = {4.5F, 2.0F, 0.0F, 8.4F};
        float[] res = summe(vek1, vek2);
    }
}
Dabei bekomme ich dann folgende Meldung und die verwirrt mich extrem, da ich ja nirgendwo int angegeben habe..
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Type mismatch: cannot convert from float[] to int

    at UE8Aufgabe2.summe(UE8Aufgabe2.java:8)
    at UE8Aufgabe2.main(UE8Aufgabe2.java:17)
 
dein Rückgabetype von min() muss
Code:
float
lauten.
nicht
Code:
float[]
 
Wobei ich float hier auch nicht richtig finde. Es sollte
Code:
int
sein... So wie du es in Post#3 schon hattest.

EDIT: Nicht genau so wie du es schon hattest. einfach alle "float" in int ändern.
 
ja daran hatte ich auch schon gedacht, aber da die aufgabe ja so lautete.. laut unseres dozenten soll es angeblich auch nur ein kleiner fehler sein
 
die min-Methode hab ich so halb verstanden, hilft mir aber leider alles irgendwie nichts.. das programm kompiliert weiterhin nicht und ich bin mittlerweile komplett verwirrt.. nochmal die hier die aufgabe im ganzen, nur um das nochmal zu zeigen..
Code:
AUFGABE 2
Gegeben sind folgende Programmteile:
Java:
public static float[] min(float v1, float v2) {
        return v1 <= v2 ? v1 : v2;
    }
 
    public static float[] summe(float[] v1, float[] v2) {
        float[] summe = new float[min(vek1.length,vek2.length)];
        for (int i=0; i<summe.length; i++)
        summe[i] = vek1[i] + vek2[i];
        return summe;
    }
 
    public static void main (String[] args) {
        float[] vek1 = {2.3F, 3.4F, -3.4F};
        float[] vek2 = {4.5F, 2.0F, 0.0F, 8.4F};
        float[] res = summe(vek1, vek2);
    }
}
Code:
a) Compiliert das Programm? Wenn nein, finden, erklären und beheben Sie die Fehler.
b) Was macht das Programm?
 
Naja was macht das Programm: summe() addiert Vektoren, min() ist eine Hilfsmethode, die für summe() verwendet wird und das Minimum von zwei Zahlen zurückgibt.
Warum es nicht kompiliert haben wir ja schon herausgefunden (float[ ] - Rückgabe und v1/v2-Umbenennung). Oder was kommt jetzt noch für eine Fehlermeldung?
 
Der code sieht jetzt folgendermaßen aus:
Java:
public class UE8Aufgabe3
{
    public static float min(float vek1, float vek2) {
        return vek1 <= vek2 ? vek1 : vek2;
    }
    public static float[] summe(float[] vek1, float[] vek2) {
        float[] summe = new float[min(vek1.length,vek2.length)];
        for (int i=0; i<summe.length; i++)
        summe[i] = vek1[i] + vek2[i];
        return summe;
    }
    public static void main(String[] args) {
        float[] vek1 = {2.3F, 3.4F, -3.4F};
        float[] vek2 = {4.5F, 2.0F, 0.0F, 8.4F};
        float[] res = summe(vek1, vek2);
    }
}
Und gibt diesen Fehler aus:
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Type mismatch: cannot convert from float to int

    at UE8Aufgabe3.summe(UE8Aufgabe3.java:8)
    at UE8Aufgabe3.main(UE8Aufgabe3.java:17)
 
Wie X5-599 schon sagte, ändere die Datentypen der Parameter und des Rückgabewertes de min-Methode in int.
vek1.length und vek2.length geben Integer zurück, woraus dieser Fehler resultiert.
 
Java:
public class UE8Aufgabe2
{
    public static int min(int vek1, int vek2) {
        return vek1 <= vek2 ? vek1 : vek2;
    }
    public static float[] summe(float[] vek1, float[] vek2) {
        float[] summe = new float[min(vek1.length,vek2.length)];
        for (int i=0; i<summe.length; i++)
        summe[i] = vek1[i] + vek2[i];
        return summe;
    }
    public static void main(String[] args) {
        float[] vek1 = {2.3F, 3.4F, -3.4F};
        float[] vek2 = {4.5F, 2.0F, 0.0F, 8.4F};
        float[] res = summe(vek1, vek2);
    }
}

Habs jetzt so aufgeschrieben und es kompiliert. War das so gemeint? dann versteh ich das jetzt zumindest halbwegs 😀 Vielen Dank!
 
Sieht gut aus. Allerdings, wenn der Aufgabensteller meint es sei nur ein kleiner Fehler, könnte es ja tatsächlich sein, dass die floats der min() Methode so gedacht sind (Parameter und Rückgabe). Vielleicht zur Veranschaulichung, dass man eine Methode die float als Parameter erwartet auch einfach so mit int aufrufen kann, aber wenn int erwartet wird evtl. erst explizit auf int ge-castet werden muss... Wie hier, wenn der Rückgabewert (float) bei einer Array Initialisierung genutzt werden soll.

Dann könnte das ganze so aussehen:

Code:
public static float min(float v1, float v2) {
        return v1 <= v2 ? v1 : v2;
}

public static float[] summe(float[] vek1, float[] vek2) {
        float[] summe = new float[(int)min(vek1.length,vek2.length)];
// ...
 

Neue Themen


Zurück
Oben