[JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Was brauchst du jetzt eigentlich noch in SectionTest ?
Einfach jetzt ein paar Testfälle schreiben.
-> Mitglieder hinzufügen und dann Ein-/Ausgaben berrechen
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

^^ Ja, genau. Ein paar Mitglieder in die Section einfügen, aber auch andere Sections in eine Section einfügen ...

JUnit Testfälle mit assertEquals. Bei mir scheitert's eben daran, dass mein Section Konstruktor die Daten für einzelne User (also Namen, IDs ... als Parameter) erwartet, obwohl ich die eigentlich für die Sektion selbst gar nicht brauche?! Ich will nur User, egal wie die heißen, in die Section einfügen.

K. A. wie ich das angehen soll ... :huh:

Ich habe dir BTW hier nochmal den ganzen Code gepostet.
------------
na das mit static musste doch nu wissen ^^ da haben wir doch dieses voll ätzende bsp da durchgenommen, wo wir 0 plan hatt (wie so oft ^^).
Aua ... ja, ja, die Wetterstation ... ich erinnere mich. :fresse:
nochmal zur verdeutlichung:

static methoden: du brauchst keine objekt-instanz (myClass myObj = new myClass();) der klasse anlegen, um auf die methode zuzugreifen, sondern du greifst über den klassennamen ganz allgemein darauf zu (statt myObj.methode(); eben myClass.methode();). bsp: bestes beispiel dafür sind so math-klassen - von denen musst du auch kein objekt anlegen -> math.abs(var); für den absolutwert einer variablen (und nicht math mathObj = new math(); mathObj.abs(var);).

static variablen: gelten objektübergreifend, wie phoenix ja schon schön "be-beispielt" hat ^^ du hast 2 objekte der selben klasse, in obj1 erhält die staticVar den wert 1, in obj2 darauf allerdings den wert 2. greift man nun über obj1 auf staticVar zu, so bekommt man die von ob2 gesetzte 2 ausgegeben.
Danke, hab's verstanden. :daumen:
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

ja dann ändere den Konstruktor oder füge einen weiteren Konstruktor hinzu.
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Hab's ja schon so probiert, aber das lässt Eclipse alles nicht zu:
Code:
import java.util.ArrayList;


public class Section extends Member {

    private final int size; // Größe des Sektions-Arrays
    private int allocation; // aktuelle Belegung mit Mitgliedern
    private Member[] section;
    private double overallIncome;
    private double overallCosts;
    private ArrayList<Section> sections;
    
    public Section(String firstName, String lastName, int ID, int size) {
        super(firstName, lastName, ID);
        this.size = size;
        this.allocation = 0;
        this.section = new Member[this.size];
        for (int i = 0; i < section.length; i++) {
            this.overallIncome += this.section[i].getIncome();
            this.overallCosts += this.section[i].getCosts();
        }
        this.sections = new ArrayList<Section>();
    }

    [COLOR=royalblue][B]public Section() {
        this();
    }[/B]
    public void addMember(Member m) {
        if (this.allocation < this.size) {
            this.section[this.allocation] = m;
            this.allocation++;
        } else {
            System.out.println("Member can't be added! Section already full.");
        }
    }
    
    public void AddSection(Section section) {
        if (this.allocation < this.size) {
            this.sections.add(section);
            this.allocation++;
        } else {
            System.out.println("Sub-Section can't be added! Section already full.");
        }
    }
}
Den Test könnte ich ungefähr so angehen, aber statt dem null müsste ich dann auch wieder Mitglieder-Namen und IDs angeben ...
Code:
import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;


public class SectionTest {

    Section sectionOne = new Section();
    
    @Before
    public void setup() {
        sectionOne.addMember(null);
        sectionOne.addMember(null);
        sectionOne.addMember(null);
    }
    
    @Test
    public void test() {
        
    }

}
^^ Außerdem sollen ja die Mitglieder verschiedene Typen haben! Geht das überhaupt bei meinem Code, dass ich da z.B. einen Trainer, einen ActiveMember und einen AmateurAthlete einfüge?

So jedenfalls nicht:
Code:
sectionOne.addMember(Trainer);
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

das ist auch wieder rekursion:)
public Section() { this(); }
mach einfach public Section() { }

und in test dann
sectionOne.addMember(new Member("hans","wurst",1);
....
...
..
Wie ist das mit Section's von Section gemeint du hast eine Section mit Sections drin und in diesen Sections sind dann wieder Member ?
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

das ist auch wieder rekursion:)
public Section() { this(); }
mach einfach public Section() { }
Ohne irgendwas drinnen funktioniert's nicht. Da kommt vom Eclipse: Implicit super constructor Member() is undefinied. Must explicitly invoke another constructor :huh:
und in test dann
sectionOne.addMember(new Member("hans","wurst",1);
....
...
..
Hab's jetzt erstmal so gelöst:
Code:
import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;


public class SectionTest {

    Section sectionOne = new Section();
    
    Trainer trainerOne = new Trainer("Anton", "Gruber", 32, 3);
    AmateurAthlete amateurAthleteOne = new AmateurAthlete("Sepp", "Mueller", 28, 1);
    ChairMember chairMemberOne = new ChairMember("Fritz", "Wallner", 65, 10);
    
    Section sectionTwo = new Section();
    Section sectionThree = new Section();
    
    @Before
    public void setup() {
        sectionOne.addMember(trainerOne);
        sectionOne.addMember(amateurAthleteOne);
        sectionOne.addMember(chairMemberOne);
        sectionOne.addSection(sectionTwo);
        sectionOne.addSection(sectionThree);
    }
    
    @Test
    public void test() {
        
    }

}
^^ Natürlich muss ich auch in sectionTwo und sectionThree noch Mitglieder einfügen. Und die Testfälle schreiben ...
Wie ist das mit Section's von Section gemeint du hast eine Section mit Sections drin und in diesen Sections sind dann wieder Member ?
Ja, genau.

Das mit dem Section() Konstruktor müsste ich jetzt noch lösen, dann könnte ich meine Testfälle fertig schreiben ...

[EDIT]

So kannst du dir das mit den Sections in einer Section jetzt vorstellen:
Code:
import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;


public class SectionTest {

    Section sectionOne = new Section();
    
    Trainer trainerOne = new Trainer("Anton", "Gruber", 32, 3);
    AmateurAthlete amateurAthleteOne = new AmateurAthlete("Sepp", "Mueller", 28, 1);
    ChairMember chairMemberOne = new ChairMember("Fritz", "Wallner", 65, 10);
    
    Section sectionTwo = new Section();
    
    TopAthlete topAthleteOne = new TopAthlete("Franz", "Berger", 43, 4);
    SupportMember supportMemberOne = new SupportMember("Hans", "Mueller", 12);
    
    Section sectionThree = new Section();
    
    TopAthlete topAthleteTwo = new TopAthlete("Hans", "Wurst", 17, 6);
    AmateurAthlete amateurAthleteTwo = new AmateurAthlete("Peppi", "Berger", 76, 81);
    
    @Before
    public void setup() {
        sectionOne.addMember(trainerOne);
        sectionOne.addMember(amateurAthleteOne);
        sectionOne.addMember(chairMemberOne);
        
        sectionTwo.addMember(topAthleteOne);
        sectionTwo.addMember(supportMemberOne);
        
        sectionThree.addMember(topAthleteTwo);
        sectionThree.addMember(amateurAthleteTwo);
        
        sectionOne.addSection(sectionTwo);
        sectionOne.addSection(sectionThree);
    }
    
    @Test
    public void test() {
        
    }

}
 
Zuletzt bearbeitet:
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

In den Section Konstruktor kannst du ja dan fast das gleiche wie in addSection schreiben.

Code:
Section(Section section) {
        if (this.allocation < this.size) {
            this.sections.add(section);
            this.allocation++;
        } else {
            Throw new IrgendwasException ("Sub-Section can't be added! Section already full.");
        }
}
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

^^ Auch damit bekomme ich vom Eclipse immer noch den selben Error (siehe voriges Posting am Anfang) ...

Außerdem soll dieser Ausdruck ...
Code:
Section sectionOne = new Section();
... unabhängig davon sein, ob ein Mitglied oder eine andere Sektion hinzugefügt wird. So würde ich mir das wünschen.
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Das Problem ist halt das Section von Member erbt. Muss das so sein ? Ist für ich irgendwie nicht logisch. Wenn die vererbung nicht wäre dann würde es keine Fehler geben.
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

^^ Aus der Angabe geht das nicht wirklich hervor, wer von wem erben muss. Zumindest die Mitglieder sollten nach meiner Logik alle von Member erben. Bei der Section kann man diskutieren ...

Nur wie würde die Klasse Section dann ausschauen?
Code:
import java.util.ArrayList;


public class Section {

    private final int size; // Größe des Sektions-Arrays
    private int allocation; // aktuelle Belegung mit Mitgliedern
    private Member[] section;
    private double overallIncome;
    private double overallCosts;
    private ArrayList<Section> sections;
    
    [COLOR=royalblue][B]public Section(int size)[/B] {
        this.size = size;
        this.allocation = 0;
        this.section = new Member[this.size];
        for (int i = 0; i < section.length; i++) {
            this.overallIncome += this.section[i].getIncome();
            this.overallCosts += this.section[i].getCosts();
        }
        this.sections = new ArrayList<Section>();
    }

    public void addMember(Member m) {
        if (this.allocation < this.size) {
            this.section[this.allocation] = m;
            this.allocation++;
        } else {
            System.out.println("Member can't be added! Section already full.");
        }
    }
    
    public void addSection(Section section) {
        if (this.allocation < this.size) {
            this.sections.add(section);
            this.allocation++;
        } else {
            System.out.println("Sub-Section can't be added! Section already full.");
        }
    }
}
^^ So könnte man's dann doch machen, oder?

Und dann in der TestKlasse noch die Section Größe als Parameter einfügen:
Code:
import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;


public class SectionTest {

    Section sectionOne = new [COLOR=royalblue][B]Section(5)[/B];
    
    Trainer trainerOne = new Trainer("Anton", "Gruber", 32, 3);
    AmateurAthlete amateurAthleteOne = new AmateurAthlete("Sepp", "Mueller", 28, 1);
    ChairMember chairMemberOne = new ChairMember("Fritz", "Wallner", 65, 10);
    
    Section sectionTwo = new [COLOR=royalblue][B]Section(2)[/B];
    
    TopAthlete topAthleteOne = new TopAthlete("Franz", "Berger", 43, 4);
    SupportMember supportMemberOne = new SupportMember("Hans", "Mueller", 12);
    
    Section sectionThree = new [COLOR=royalblue][B]Section(4)[/B];
    
    TopAthlete topAthleteTwo = new TopAthlete("Hans", "Wurst", 17, 6);
    AmateurAthlete amateurAthleteTwo = new AmateurAthlete("Peppi", "Berger", 76, 81);
    
    @Before
    public void setup() {
        sectionOne.addMember(trainerOne);
        sectionOne.addMember(amateurAthleteOne);
        sectionOne.addMember(chairMemberOne);
        
        sectionTwo.addMember(topAthleteOne);
        sectionTwo.addMember(supportMemberOne);
        
        sectionThree.addMember(topAthleteTwo);
        sectionThree.addMember(amateurAthleteTwo);
        
        sectionOne.addSection(sectionTwo);
        sectionOne.addSection(sectionThree);
    }
    
    @Test
    public void test() {
        
    }

}
Dann bleiben mir zu dem Beispiel nur noch 2 Fragen:

1.) In Klasse Section sind overallIncome und overallCosts im Eclipse gelb unterwellt mit der Meldung: The value of the field Section.overallIncome (bzw. Section.overallCosts) is never used ... Macht das was? Ist ja nur ein warning und kein error, aber stört mich irgendwie trotzdem ...
2.) In Klasse Member (siehe hier am Anfang des Spoilers) habe ich das selbe mit ID
 
Zuletzt bearbeitet:
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

So habe ich jetzt den gesamten Section Test gelöst:
Code:
import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;


public class SectionTest {

    Section sectionOne = new Section(3);
    
    Trainer trainerOne = new Trainer("Anton", "Gruber", 32, 3);
    AmateurAthlete amateurAthleteOne = new AmateurAthlete("Sepp", "Mueller", 28, 1);
    ChairMember chairMemberOne = new ChairMember("Fritz", "Wallner", 65, 10);
    
    Section sectionTwo = new Section(5);
    
    TopAthlete topAthleteOne = new TopAthlete("Franz", "Berger", 43, 4);
    SupportMember supportMemberOne = new SupportMember("Hans", "Mueller", 12);
    
    Section sectionThree = new Section(4);
    
    TopAthlete topAthleteTwo = new TopAthlete("Hans", "Wurst", 17, 6);
    AmateurAthlete amateurAthleteTwo = new AmateurAthlete("Peppi", "Berger", 76, 81);
    
    @Before
    public void setup() {
        sectionOne.addMember(trainerOne);
        sectionOne.addMember(amateurAthleteOne);
        sectionOne.addMember(chairMemberOne);
        
        sectionTwo.addMember(topAthleteOne);
        sectionTwo.addMember(supportMemberOne);
        
        sectionThree.addMember(topAthleteTwo);
        sectionThree.addMember(amateurAthleteTwo);
        
        sectionOne.addSection(sectionTwo);
        sectionOne.addSection(sectionThree);
    }
    
    @Test
    public void testMemberAddFailure() {
        [COLOR=royalblue][B]assertEquals("Member can't be added! Section already full.", sectionOne.addMember(topAthleteOne));    [/B]      
    }
    
    @Test
    public void testMemberAddSuccess() {        
        [COLOR=royalblue][B]assertEquals(true, (sectionTwo.overallIncome == 220.0 && sectionTwo.overallCosts == 55.0)); [/B]    }
    
    @Test
    public void testSectionAddFailure() {
       [COLOR=royalblue][B] assertEquals("Sub-Section can't be added! Section already full.", sectionOne.addSection(sectionThree))[/B];
    }
    
    @Test
    public void testSectionAddSuccess() {
        sectionTwo.addSection(sectionOne);
        [COLOR=royalblue][B]assertEquals(true, (sectionTwo.overallIncome == 1640.0 && sectionTwo.overallCosts == 406.5));[/B]    }

}
^^ Nur wie soll ich das mit den Strings lösen? String und Objekt kann man ja nicht vergleichen ... :huh:

Und die anderen beiden Tests mit den Einnahmen und Kosten liefern mir beide false statt true weil in Klasse Section in Zeile 18 angeblich eine NullPointerException vorliegt. Sieht einer das Problem (?):
Code:
import java.util.ArrayList;


public class Section {

    private final int size; // Größe des Sektions-Arrays
    private int allocation; // aktuelle Belegung mit Mitgliedern
    private Member[] section;
    public double overallIncome;
    public double overallCosts;
    private ArrayList<Section> sections;
    
    public Section(int size) {
        this.size = size;
        this.allocation = 0;
        this.section = new Member[this.size];
        for (int i = 0; i < section.length; i++) {
            [COLOR=royalblue][B]this.overallIncome += this.section[i].getIncome();[/B] [COLOR=seagreen]// Zeile 18            [COLOR=royalblue][B]this.overallCosts += this.section[i].getCosts(); [/B][COLOR=seagreen]// Zeile 19        }
        this.sections = new ArrayList<Section>();
    }

    public void addMember(Member m) {
        if (this.allocation < this.size) {
            this.section[this.allocation] = m;
            this.allocation++;
        } else {
            System.out.println("Member can't be added! Section already full.");
        }
    }
    
    public void addSection(Section section) {
        if (this.allocation < this.size) {
            this.sections.add(section);
            this.allocation++;
        } else {
            System.out.println("Sub-Section can't be added! Section already full.");
        }
    }
    
}
^^ Der Fehler liegt ganz sicher im Konstruktor von Section, weil ich alle anderen Klassen erfolgreich getestet habe.

getIncome() und getCosts() sind BTW Getter aus der Klasse Member:
Code:
public class Member {
    
    private final String firstName;
    private final String lastName;
    private final int ID;
    private double income;
    private double costs;
    
    public Member(String firstName, String lastName, int ID) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.ID = ID;
        this.income = this.getIncome();
        this.costs = this.getCosts();
        this.getSurplus();
    }
    
    public void setIncome(double income) {        
        this.income = income;        
    }
    
    [COLOR=royalblue][B]public double getIncome() {        
        return this.income;        
    }[/B]    
    public void setCosts(double costs) {        
        this.costs = costs;        
    }
    
    [COLOR=royalblue][B]public double getCosts() {        
        return this.costs;
    }[/B]    
    public double getSurplus() {        
        return this.getIncome()-this.getCosts();
    }
    
    public String toString() {
        String result = new String();
        result = "Name: " + this.firstName + " " + this.lastName + " | Income: " + this.getIncome() + " | Costs: " + this.getCosts() + " | Surplus: " + this.getSurplus();
        return result;        
    }

}
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Zu 1. Entweder machst du bei addMember in Section einen Rückgabewert hin oder du wirfst eine Exception, dann kannst du das mit Unit Tests prüfen.
Zu 2. Du schreibst ja auch keine Member ins Array, im Array wird nur null stehen.
this.section = new Member[this.size]; Dabei wird ja immer der alte Wert/Inhalt von section überschieben
 
Zuletzt bearbeitet:
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Zuerst zu 2.:
Ich habe schon gedacht, dass ich die Member der Reihe nach ins Array einfüge?! Auch der Index wird ja nach jedem Einfügen immer schön um 1 erhöht, damit das nächste Mitglied nicht das vorige überschreibt:
Code:
public boolean addMember([COLOR=royalblue][B]Member m[/B]) {
        if (this.allocation < this.size) {
            [COLOR=royalblue][B]this.section[this.allocation] = m;[/B]            [COLOR=royalblue][B]this.allocation++;[/B]        } else {
            System.out.println("Member can't be added! Section already full.");
            return false;
        }
        return true;
    }
Zu 1.: Ok, hab's jetzt mit Rückgabewert gemacht, aber in der Testklasse jammert er immer noch bei allen 4 Testfällen wegen der NullPointerException. :huh:

Die kommt von hier:
Code:
public Section(int size) {
        this.size = size;
        this.allocation = 0;
        this.section = new Member[this.size];
        for (int i = 0; i < section.length; i++) {
            [COLOR=royalblue][B]this.overallIncome += this.section[i].getIncome();
            this.overallCosts += this.section[i].getCosts();[/B]        }
        this.sections = new ArrayList<Section>();
    }
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Wenn du den Konstruker aufrust dann erstellt du ja ein Array (section) für Members ABER in dem Array steht nichts drin.:devil:
Die For-Schleife ist also total sinnfrei, durch ein leeres Array zu iterieren und dabei was zu erwarten (außer Fehler) ist nicht gerad sinnvoll......:huh:
for (int i = 0; i < section.length; i++)
{
this.overallIncome += this.section.getIncome(); // Zeile 18
this.overallCosts += this.section.getCosts(); // Zeile 19
}
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Und wie ändere ich das? Soll ich meine addMember() Methode im Konstruktor aufrufen? :huh:

Ich dachte, durch den Aufruf von addMember() in der Testklasse werden die Mitglieder in die Section eingefügt, die ja intern durch das Array verwaltet wird?!

DarkMo und ich hatten vor kurzem eine ArrayList, wo das Hinzufügen genau so funktioniert hat:
Code:
    public ArrayList() { 
        this.initCap = 6;
        this.realCap = this.initCap;
        [COLOR=royalblue][B]this.list = new Element[this.realCap];[/B]        this.size = 0;
    }
    
    /**
     * Konstruktor 2 mit selbstgewählter Kapazität
     * @param capacity = beliebige Kapazität
     */
    public ArrayList(int capacity) { 
        int minCap = 4; // selbstgewählte Minimum Kapazität der Liste
        if (capacity > minCap) {
            this.initCap = capacity;
            this.realCap = capacity;
        } else {
            this.initCap = 6;
            this.realCap = 6;
        }
        [COLOR=royalblue][B]this.list = new Element[this.realCap];[/B]        this.size = 0;
    }

    /**
     * Füge Elemente am Ende der Liste hinzu
     * @param element = hinzuzufügendes Element
     */
    public void add(Element element) {
        if (this.size == this.realCap) {
            this.expandList();
            [COLOR=royalblue][B]this.list[this.size] = element;[/B]        } else {
            [COLOR=royalblue][B]this.list[this.size] = element;[/B] // Element am Ende der Liste einfügen
        }
        this.size++; // Zähler für Elemente um 1 erhöhen
    }
^^ Oder übersehe ich hier einen bedeutenden Unterschied?
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Zur verdeutlichung :
1. Deklarierst eine Liste
2. Du initalisiert die Liste
3. Du füllst die Liste mit Inhalt
4. Du liest Elemente aus der Liste

In deinem Beispiel ist
2 = this.list = new Element[this.realCap];
und
3 = this.list[this.size] = element;

In deinem Hauptprogramm initalisiert du zwar deine Liste und dann benutzt du sie gleich, bevor sie mit Inhalt gefüllt wurde .

this.section = new Member[this.size]; initalisiert deine Liste, mehr NICHT.
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Okay ... also wäre es das beste, 2 Getter für overallIncome und overallCosts zu schreiben? Ich probiere es mal aus ... :)

[EDIT]
Bisschen was hat's gebracht. 2 der 4 Tests laufen schon mal fehlerfrei durch (die ohne Kostenberechnung):

Capture.JPG

Bei den anderen beiden (die MIT Kostenberechnung) habe ich immer noch NullPointerException. Also habe ich das Problem wohl nur "ausgelagert"?! Und wieso bekomme ich x-mal die Fehlerausgabe wegen dem Hinzufügen-Versuch der Section, wo ich das doch nur 1 Mal mache?

Code:
public double getOverallIncome() {
        for (int i = 0; i < section.length; i++) {
            this.overallIncome += this.section[i].getIncome();
        }
        return this.overallIncome;
    }
    
    public double getOverallCosts() {
        for (int i = 0; i < section.length; i++) {
            this.overallCosts += this.section[i].getCosts();
        }
        return this.overallCosts;
    }
 
Zuletzt bearbeitet:
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Ich glaub ich rede gerad irgendwie an dir vorbei :ugly:

Code:
1    public Section(int size) {
2       this.size = size;
3      this.allocation = 0;
4        this.section = new Member[this.size];
5        for (int i = 0; i < section.length; i++) {
6            this.overallIncome += this.section[i].getIncome(); // Zeile 18
7            this.overallCosts += this.section[i].getCosts(); // Zeile 19
8       }
9       this.sections = new ArrayList<Section>();
    }
4 -> Du erstellt ein Array mit der größe size.
5 -> section.lenght ist das gleiche wie this.size in diesem moment Wenn size > 0 dann gehe weiter
6 -> Du greist auf section[0] zu in section[0] steht null , null.getIncome():devil::devil::devil: das kann nicht gutgehen
Du musst dein Memberarray erst mit Werten füllen bevor du die verwenden kannst oder du musst die verwendung an den Punkt verschieben wo Werte im Array sind.
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Doch, ich verstehe schon, was du sagen willst. Ich verstehe nur nicht, wieso das Array die ganze Zeit über leer sein soll, wo ich doch in der TestKlasse 9 Mal (!) addMember() aufrufe und dabei durch diese Zeile ...
Code:
this.section[this.allocation] = m;
... jedes Mal ein Member im Array landen müsste?!

Ich hab's jetzt so probiert; hat aber auch nichts gebracht:
Code:
    public boolean addMember(Member m) {
        if (this.allocation < this.size) {
            this.section[this.allocation] = m;
            this.allocation++;
            for (int i = 0; i < section.length; i++) {
                this.overallIncome += this.section[i].getIncome();
                this.overallCosts += this.section[i].getCosts();
            }
            
        } else {
            System.out.println("Member can't be added! Section already full.");
            return false;
        }
        return true;
    }
 
AW: [JAVA] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...

Debugger benutzen...........


ohne das im Konstruktor sollte es gehen
Code:
        for (int i = 0; i < section.length; i++) {
            this.overallIncome += this.section[i].getIncome(); // Zeile 18
            this.overallCosts += this.section[i].getCosts(); // Zeile 19
        }
Wenn du eine neue Section erstellt wird der Konstruktor aufgerufen, im Konstruktor willst du jetzt die Kosten berrechnen, why?, du hast doch zu diesem Zeitpunkt noch keine Member in der Section das siehst du doch selber in deinem Code(SectionTest), du erstellst erst eine Section und erst später werden die Member in die Section eingefügt.<br>
 
Zurück