tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
28
ZUGRIFFE
5544
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    folgendes....


    Schreiben Sie eine weitere Methode, die das Array im Attribut aufsummiert, allerdings
    auf rekursive Art. Verwenden Sie dazu eine weitere Hilfsmethode
    mit zwei Parametern, die den linken und rechten Index des aufzusummierenden Bereichs
    angibt. Diese Methode soll, sofern der spezifizierte Bereich aus mehr als einer
    Zahl besteht, den Bereich halbieren und rekursiv jeweils die Summe der beiden Hälften
    berechnen, diese zusammenzahlen und die Summe zurückgeben!


    schaut bei mir mal so aus:

    public static float ausummieren2 ( float[] array ) {

    float[] ha1 = new float[];
    float[] ha2 = new float[];

    while ( array.length == 1) {
    return array[i];
    }
    for ( int i = 0; i<= array.length/2 ; i++){
    System.arraycopy (array,0,ha1,0,array.length/2);
    return ha1;
    }

    for (int i <= array.length/2, i = array.length, i++){
    System.arraycopy (array,array.length/2,ha2,0,array.length/2);
    return ha2;
    }


    motzt mir aber der kompiler schon bei ha1 und ha2 weil er da ne länge haben will, die ich aber nicht hab!
    außerdem kann er mit sowas "int i = 0; i<= array.length/2 ; i++" nix anfangen!
    hat jemand eine idee wie ich das machen kann?
     

  2. #2
    MeinerEiner_80 Tutorials.de Gastzugang
    Zitat Zitat von hornylist Beitrag anzeigen

    public static float ausummieren2 ( float[] array ) {

    float[] ha1 = new float[];
    float[] ha2 = new float[];

    while ( array.length == 1) {
    return array[i];
    }
    for ( int i = 0; i<= array.length/2 ; i++){
    System.arraycopy (array,0,ha1,0,array.length/2);
    return ha1;
    }

    for (int i <= array.length/2, i = array.length, i++){
    System.arraycopy (array,array.length/2,ha2,0,array.length/2);
    return ha2;
    }
    Was tust du da eigentlich? Das ist doch keinen Meter rekursiv!
    Wieso machst du
    return ha1;
    wieso
    return ha2,

    ?
    Wo ist die zweite Hilfsmethode die du sinnvollerweise nutzen sollst?

    Ich glaube du solltest dir noch ein paar mehr Gedanken dazu machen.. Ein neues Konzept erstellen..
    Denn wenn man dir in diesem Stadium Tips geben soll, geh das meiner Meinung nach nicht, ohne das Programm selbst fast zu schreiben..


    *grüssle*
    MeinerEiner
     

  3. #3
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    ha 1 und ha2 sind meine neuen teilarrays...
    von denen hätte ich dann die anfangs und die endwerte zurückgegeben!

    man kann auch tipps geben ohne den code dazu... sowas geht...
    aber egal...
    über gedankenanstöße würd ich mich freun...
     

  4. #4
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    also ein Tipp wäre mal, dass du dir mal das Grundprinzip von Rekursion anschaust. Wie Meiner_Einer schon anmerkte, ist nichts von deinem bisherigen Ansatz rekursiv.
    Viel mehr tipps kann man dir jetzt auch nicht geben ohne die Lösung zu geben.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  5. #5
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    ich soll also eine methode machen, die sich selber immer und immer wieder aufruft... oder kann ich auch eine methode machen die das array in 2 teile teilt und eine andere ruft diese dann auf?
    ist das prinzip mit system.arraycopy richtig? oder geht das garnicht?
     

  6. #6
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Da das eine Übungsaufgabe sein soll, denke ich mal, brauchst du System.arraycopy gar nicht. das geht komplett ohne. So wie ich das verstanden habe, soll nachher ein Array zurück gegeben werden.

    Schau dir mal diesen Beitrag an, da hab ich versucht zu erklären wie man am besten auf eine Rekusive lösung kommt.
    http://www.tutorials.de/forum/java/2...-aber-wie.html


    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  7. #7
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    hmm..... hab mir das durchgelesen, hilft mir aber leider nicht sonderlich weiter.... versteh schon was das alles macht und wie, kann das aber leider nicht auf meine aufgabe transferieren
    ich brauch eine methode, die mir die beiden enden des arrays gibt und eine die das array rekursiv teilt und aufsummiert....
    wie soll die rekursive teilung dann machen?
    da brauch ich eine methode, die mir das array teilt, und die nehm ich dann immer wieder her so wie

    if (array.length == 1) {
    return array[0];

    else {

    jetzt brauch ich hier eine Hilfsmethode zb. teilearray die dann den array teilt, oder?
    und wenn der array dann wieder länger is als 1 dann muss ich teilearray wieder aufrufen, oder? is das gedanklich richtig?
     

  8. #8
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    oder muss ich hier meine methode von oben aufrufen und vorher definieren dass sie das array teilen soll....
     

  9. #9
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Ich kenne leider deine Aufgabe nicht. Ich hab das bisher so verstanden, dass das Array in 2 Teile geteilt werden soll und diese 2 hälften miteinander addiert werden sollen, somit hat man dann wieder nur ein Array als Rückgabeparameter.
    In einer Methode kann man nämlich immer nur einen Wert zurückgeben und keine 2.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  10. #10
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    Schreiben Sie eine weitere Methode, die das Array im Attribut aufsummiert, allerdings
    auf die oben beschriebene rekursive Art. Verwenden Sie dazu eine weitere Hilfsmethode
    mit zwei Parametern, die den linken und rechten Index des aufzusummierenden Bereichs
    angibt. Diese Methode soll, sofern der spezifizierte Bereich aus mehr als einer
    Zahl besteht, den Bereich halbieren und rekursiv jeweils die Summe der beiden Hälften
    berechnen, diese zusammenzahlen und die Summe zurückgeben!


    oben beschriebene rek.art:

    Unter der Annahme, dass große und kleine Zahlen in einem Array ungefahr uberall gleich
    häufig vorkommen, ist es daher sinnvoll, das Array in zwei Halften aufzuteilen, diese einzeln
    zu summieren und die beiden Ergebnisse aufzuaddieren. Das Aufsummieren der beiden Hälften kann dann wieder rekursiv durch weiteres Aufteilen und Zusammenzählen geschehen.
    heißt quasi:

    methode1. array in 2 teile teilen, und diese dann aufsummieren!
    und zwar durch so langes teilen des arrays bis die teilarrays 1 lang sind und diese dann aufsummieren...
    das ganze dann mit der hilfsmethode

    hilfsmethode:

    soll jeweils den startwert der beiden teilarray wiedergeben! - falls das teilarray länger als 1 ist soll dieser wieder geteilt und rekursiv aufsummiert werden!


    quasi einmal rekursiv teilen und in der hilfsmethode rekusiv ausummieren
    ? ist das jetzt vom prinzip her so richtig?
     

  11. #11
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Irgendwie muss ich sagen verstehe ich den Text nicht. So wie ich den Text verstehe machen die Methode und die Hilfsmethode, die verwendet werden soll, genau das gleiche. Also beide Methoden sollen das Array aufteilen und aufsummieren.

    Ich würde dir mal raten, dass du erstmal das alles in einer Methode rekursiv löst, das ist nämlich gar kein Problem. Grob gesagt, wenn das Array, welches übergeben wird nur 1 Feld groß ist, gibst du direkt die zahl zurück, sonst rufst du die Methode nochmal auf und übergibst ein Teil-Array, rufst die Methode nochmal auf mit dem anderen TeilArray, addierst die ergebnisse und gibst das zurück.

    MFG

    zEriX
    Geändert von zerix (06.07.07 um 11:41 Uhr)
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  12. #12
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    mir gehts genau so....
    hab das jetzt mal so gemacht
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     
    public static float sum2 ( float[] array ) {
     
    if (array.length == 1 ) {
                return array[0];
                }
                else {
                    sum2(int i = 0; i< array.length/2; i++);
                        return wert1;
                                     sum2( int i == array.length/2 ;i = array.length; i++);
                        return wert2;
                        gesamtwert = wert1 + wert2;
                        }

    nimmt mir der cimpiler aber nicht ab wegen den zeilen
    int i = 0; i< array.length/2; i++)
    und
    int i == array.length/2 ;i = array.length; i++

    weiß nicht wie ich das sonst schreiben soll...
    hat jemand einen tip?
    ich übergeb ihm ja jeweils ein teilarray... einmal bis array.length/2 und dann das andere bis zum ende des arrays ab der hälfte.... aber das erkennt er nicht weil die formulierungen falsch sind!
     

  13. #13
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    else {
    sum2(int i = 0; i< array.length/2; i++);
    return wert1;
    sum2( int i == array.length/2 ;i = array.length; i++);
    return wert2;
    gesamtwert = wert1 + wert2;
    }

    Hast du schon mal irgendwas mit Java oder einer anderen Sprache gemacht
    Das was du da schreibst, ist die Bedingung einer for-Schleife und kein Array. Was soll dann
    Code :
    1
    
    return wert1;
    und
    Code :
    1
    
    return wert2;
    ? Wo kommen die her und wo werden die gesetzt. Dir ist doch sicher auch klar, dass nach einem return die Methode verlassen wird und nichts weiter gemacht wird, oder?

    Du solltest dir erstmal ein Teil-Array "zusammenbauen" das kommt ja nicht aus dem nichts und das kannst du dann übergeben. Dann solltest du vielleicht das was zurück geliefert wird, von der Methode in Variablen speichern, diese Variablen dann addieren und zurückgeben.

    MFG

    zEriX
    Geändert von zerix (06.07.07 um 12:31 Uhr)
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  14. #14
    hornylist hornylist ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    36
    wie bau ich mir denn dann meine teilarrays? wie mach ich das?
     

  15. #15
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Du machst dir ein neues Array, welches so groß ist wie das TeilArray was du haben willst, und schreibst die werte dann da rein.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

Ähnliche Themen

  1. Array teilen
    Von pflaster999 im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 14.06.09, 17:03
  2. überdimensionales array teilen
    Von Lobedan im Forum PHP
    Antworten: 2
    Letzter Beitrag: 13.06.09, 00:50
  3. in C ein Array mit For aufsummieren...
    Von Zorrtis im Forum C/C++
    Antworten: 11
    Letzter Beitrag: 21.10.08, 11:56
  4. Array nach bestimmten Muster teilen
    Von Breuker im Forum PHP
    Antworten: 6
    Letzter Beitrag: 03.04.07, 12:30
  5. Antworten: 5
    Letzter Beitrag: 12.12.03, 16:13