# Float-Array weiteren Array übergeben und Rekursion



## anos3 (21. Apr 2021)

Aufgabenstellung:
- Legen Sie eine von außen sichtbare Klasse Floats an, die ein float-Array werte und ein float
kleinstes als von außen nicht sichtbare Attribute hat.
 Legen Sie in Floats einen von außen sichtbaren parametrisierten Konstruktor an, der das Attribut werte
mit dem übergebenen float-Array initialisiert.
- Implementieren Sie in der Klasse Floats eine Methode float kleinere(float x, float y), die
von x und y den Wert zurückgibt, der den kleineren Absolutwert (Betrag) hat. Verwenden Sie die in Java
verfügbare Methode float Math.abs(float z) zur Berechnung des Absolutwertes.
- Implementieren Sie nun in der Klasse Floats eine Methode void setKleinstes(), die dem Attribut
kleinstes den Eintrag in dem Array werte mit dem kleinsten Absolutwert zuweist. Verwenden Sie
hierzu die Methode kleinere.
- Implementieren Sie weiter eine Methode ausgabeRekursiv, die rekursiv die Werte aus dem Array
werte, beginnend mit dem als Parameter übergebenen Index bis zum letzten Element auf dem Bildschirm
ausgibt. Sie können davon ausgehen, dass nur gültige Indizes übergeben werden. Weiterhin soll
das kleinste Element kleinstes zuerst gesetzt und dann ausgegeben werden.
 Legen Sie eine Test-Klasse TestFloats an:
– In der main-Methode sollen Sie ein Array definieren, welches Sie mit 10 Objekten vom Typ Floats
befüllen.
– Verwenden Sie hierfür eine Schleife (i = 0; 1; ...; 9) und übergeben Sie bei der Instanziierung der
Float-Objekte jeweils ein drei-elementiges float-Array gemäß der Bildungsregel ( 1.1f + i ,
- i*9.5f , 10 - i + 0.1f*i*i ), wobei in Java (float)2.2 und 2.2f äquivalent sind und
eine double-Variable zu einer float-Variable casten.
– Von dem Floats-Objekt im Array mit dem größten Index soll die Methode ausgabeRekursiv
aufgerufen werden, sodass alle Elemente und das kleinste Element auf dem Bildschirm ausgegeben
werden.

Mein Code:
[CODE lang="java" title="TestFloat"]public class TestFloat {

    public static void main(String[] args) {
        // Array mit 10 Objekten von Typ float
        float[] array = new float[10];
        // Befuellen mit Schleife
        for (int i=0; i<array.length; i++) {
            float [] floatArray = {(float)1.1+i,-i*(float)9.5,10-i+(float)0.1*i*i};
            array_= floatArray;
        }
        for (int i=0; i<array.length; i++) {
            System.out.println(array);
        }
    }
}
[/CODE]
[CODE lang="java" title="Floats"]
public class Floats {
    public float[] werte;
    private static float kleinstes;

    //parametrisierter Konstruktor
    public Floats(float[] werte) {
        this.werte=werte;
    }

    // Methode fuer Rueckgabe des Wertes mit kleinerem Absolutbetrag
    public float kleinere (float x, float y) {
        x = Math.abs(x);
        y = Math.abs(y);
        if (x >= y) {
            return y;
        } else {
            return x;
        }
    }

    // Methode setKleinstes
    public void setKleinstes() {
        kleinstes=kleinere(kleinstes, kleinstes);
    }

    // Methode fuer rekursive Ausgabe
    public static void ausgabeRekursiv(float[] werte, int idx) {
        werte[idx]=kleinstes;

        if (idx+1 >= werte.length) {
            System.out.print(werte[idx]);
        } else {
            System.out.print(werte[idx]);
            ausgabeRekursiv(werte, idx++);
        }
    }
}
[/CODE]

Bei den unterstrichenen Teilen weiß ich irgendwie nicht weiter.. wo genau muss ich diesen 3-Elemente langen Array wieder übergeben? 
Verstehe ich das überhaupt richtig, dass der kleinste Wert allgemein immer an erster Stelle stehen und der restliche Array einfach rekursiv ausgegeben werden soll? Allgemein an erster Stelle oder an der des übergebenen Index?
Wäre sehr dankbar für ein paar Denkanstöße.._


----------



## Gelöschtes Mitglied 65838 (21. Apr 2021)

es ist brutal schwer dein Problem überhaupt zu erkennen es ist einfach zu viel Text...

könntest du einfach mal 1Problemganz klar ganz kruzbeschreiben

was mir schon mal Aufgefallen ist
1. du erstellst niemals ein object vom typ Floats die Klasse wird gar nicht benutzt
2. warum ist kleineres static

Zu der Frage mit dem Kleinsten soweit ich das Verstanden habe:
dass du ein Sortiertes Array haben sollst und das Kleinste wäre immer das an der 0ten stelle, dann macht aber das Attribute kleinste keinen Sinn
ODER
du hast ein unsortiertes Array und in Kleinstes sollte vom ganzen array das kleinste drin stehen dann macht das kleinste wieder Sinn


----------



## mihe7 (21. Apr 2021)

anos3 hat gesagt.:


> - Implementieren Sie nun in der Klasse Floats eine Methode void setKleinstes(), die dem Attribut
> kleinstes den Eintrag in dem Array werte mit dem kleinsten Absolutwert zuweist. Verwenden Sie
> hierzu die Methode kleinere.


Du musst hier schon über die Elemente im Array iterieren.



anos3 hat gesagt.:


> In der main-Methode sollen Sie ein Array definieren, welches Sie mit 10 Objekten vom Typ Floats
> befüllen.


Du sollst den Typ Floats (Deine Klasse) verwenden, nicht float. Vielleicht macht nun der Rest auch mehr Sinn?


----------



## anos3 (21. Apr 2021)

mihe7 hat gesagt.:


> Du musst hier schon über die Elemente im Array iterieren.
> 
> 
> Du sollst den Typ Floats (Deine Klasse) verwenden, nicht float. Vielleicht macht nun der Rest auch mehr Sinn?


Zwar weiß ich immernoch nicht genau, was die Aufgabenstellung überhaupt von mir möchte. Schade, dass keine Beispielausgabe angegeben ist. Ich habe mich vorhin nochmal dran gesetzt, bin auch definitiv weiter und hoffentlich näher an einem richtigen Ergebnis, jetzt habe ich (glaube ich) nur Probleme mit der rekursiven Ausgabe: 

[CODE lang="java" title="Floats" highlight="37-43"]
public class Floats {
    public float[] werte;
    private float kleinstes;

    //parametrisierter Konstruktor
    public Floats(float[] werte) {
        this.werte=werte;
    }

    // Getter fuer Werte
    public float[] getWerte() {
        return werte;
    }

    // Methode fuer Rueckgabe des Wertes mit kleinerem Absolutbetrag
    public float kleinere (float x, float y) {
        x = Math.abs(x);
        y = Math.abs(y);
        // y kleiner
        if (x >= y) {
            return y;
        // x kleiner
        } else {
            return x;
        }
    }

    // Methode setKleinstes
    public void setKleinstes(float x, float y) {
        kleinstes=werte[0];
        for(int i =1;i < werte.length;i++){
            kleinstes = kleinere(kleinstes, werte_);
        }
    }

    // Methode fuer rekursive Ausgabe
    public void ausgabeRekursiv(float[] werte, int idx) {
        if (idx+1 >= werte.length) {
            System.out.print(kleinstes);
        } else {
            System.out.print(kleinstes);
            ausgabeRekursiv(werte, idx++);
        }
    }
}
[/CODE]

[CODE lang="java" title="TestFloat" highlight="13"]
public class TestFloat {

    public static void main(String[] args) {
        // Array mit 10 Objekten von Typ Float
        Floats[] array = new Floats [10];

        // Befuellen mit Schleife
        for (int i=0; i<array.length; i++) {
            // Bildungsregel
            float [] arrayInnen = {(float)((double)1.1 + i), (float)(-i*(double)9.5),(float)(10-i + (double)0.1 *i *i)};
            array = new Floats(arrayInnen);
        }
        array[9].ausgabeRekursiv(array[9].getWerte(), 0);
    }
}

[/CODE]_


----------



## mihe7 (21. Apr 2021)

Zeile 37: das Array brauchst Du nicht als Parameter - die Werte stehen ja schon im Objekt.
Zeile 38: überdenke die Bedingung, spiel es mal z. B. für ein zwei-elementiges Array {1,2} durch.
Zeile 41: Du willst das Element ausgeben, das sich an Index idx befindet.
Zeile 42: Du musst idx nicht inkrementieren.


----------



## anos3 (22. Apr 2021)

[CODE lang="java" title="Floats final gefixt"]
public class Floats {
    public float[] werte;
    private float kleinstes;

    //parametrisierter Konstruktor
    public Floats(float[] werte) {
        this.werte=werte;
    }

    // Getter fuer Werte
    public float[] getWerte() {
        return werte;
    }

    // Methode fuer Rueckgabe des Wertes mit kleinerem Absolutbetrag
    public float kleinere (float x, float y) {
        x = Math.abs(x);
        y = Math.abs(y);
        // y kleiner
        if (x >= y) {
            return y;
        // x kleiner
        } else {
            return x;
        }
    }

    // Methode setKleinstes
    public void setKleinstes(float [] werte) {
        kleinstes=werte[0];
        for(int i =1;i < werte.length;i++){
            kleinstes = kleinere(kleinstes, werte_);
        }
    }

    // Methode fuer rekursive Ausgabe
    public void ausgabeRekursiv(float[] werte, int idx) {
        System.out.println(werte[idx]);
        if(idx<werte.length-1) {
            ausgabeRekursiv(werte,idx+=1);
        } else {
        // kleinsten Wert finden und ausgeben, Methode nicht erneut aufrufen
        setKleinstes(werte);
        System.out.println("kleinster Wert: " + kleinstes);
        }
    }
}
[/CODE]_


----------



## kneitzel (22. Apr 2021)

Der Punkt "das Array brauchst Du nicht als Parameter - die Werte stehen ja schon im Objekt." gilt natürlich auch für setKleinstes.


----------

