Avatar billede rdc Nybegynder
18. juni 2006 - 17:39 Der er 46 kommentarer og
1 løsning

En der hurtigt kan finde fejlen?

Hejsa


Jeg har nu snart siddet de sidste 3 timer og ledt og ledt efter den sammen fejl... har desværre ikke nogen jeg kan få hjælp af lige pt... og opgaven skal afleveres på tirsdag... Derfor har jeg ret travlt, men kan bare ikke komme videre når jeg konstant får fejlen....


Fejlen opstår i at jeg læser nogle data udfra en fil ved brug af det her:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class læsMål {

    private static double udgift = 0;
    static Etageejendom mål = new Etageejendom();
   
   
    public static Etageejendom læsMål(String Filmåledata){
       
        try {
           
            BufferedReader læser = new BufferedReader(new InputStreamReader(new FileInputStream("testmål.txt")));
           
            String linie;
           
            while ( (linie = læser.readLine()) != null) {
               
                StringTokenizer delemål = new StringTokenizer(linie, " ");
               
                String lejlighedstekst = delemål.nextToken();
               
                if (lejlighedstekst.charAt(1) != 'H' && lejlighedstekst.charAt(1) != 'V') {
                   
                    udgift = Double.parseDouble(lejlighedstekst);
                    mål.setUdgift(udgift);
                }
                if (lejlighedstekst.charAt(1) == 'H' || lejlighedstekst.charAt(1) == 'V') {
               
                    int lejlighedsID = Integer.parseInt(lejlighedstekst.substring(0,1));
               
                    Måler målinger = new Måler(lejlighedsID);
               
                    String lejlighedsSide = lejlighedstekst.substring(1,2);                 

                    målinger.setSide(lejlighedsSide);
               
                    while (delemål.hasMoreTokens()) {
                   
                        String objekt = delemål.nextToken();
                   
                        double forbrug = Double.parseDouble(delemål.nextToken());
                   
                        if (objekt.charAt(0)=='A') {
                           
                            // Hvis det er et rum (radiator)
                           
                            //int rumID = Integer.parseInt(objekt.substring(1,2));
                            String målID = objekt;
                           
                            Radiator radiator = new Radiator(forbrug,målID);
                           
                            målinger.tilføjRadiator(radiator);
                        }
                        else if (objekt.charAt(0)=='G') {
                           
                            // Hvis det er en garage
                           
                            int garageID = Integer.parseInt(objekt.substring(1,2));
                           
                            Garage garagemål = new Garage(0,garageID,forbrug);
                           
                            målinger.addGarage(garagemål);
                        }
                    }
                    mål.TilføjMål(målinger);
                }
            }   

        }
        catch (NumberFormatException error) {
           
            error.printStackTrace();
           
        }
        catch (FileNotFoundException error) {
           
            System.out.println("Fejl filen blev ikke fundet");
           
        }
        catch (IOException error) {
           
            System.out.println("Fejl");
        }
        return mål;
    }
}


jeg mener selv at jeg gemmer mine oplysninger i et "etageejendom", som hedder "mål". og jeg gemmer "målinger" i "mål" og gemmer "radiator" i "målinger"... det har jeg så ville hente ud på følgende måde:


    public double udregnSamletForbrugForEnLejlighed(int l){
       
        ArrayList radiator = målinger.get(l).getMåler();
        ArrayList<Radiator> rumme29 = radiator;
        double samletForbrugForEnLejlighed = 0;
        for (int p=0; p<rumme29.size();p++){
            Radiator e2 = rumme29.get(p);
            if(e2.getID().startsWith("A")){
                samletForbrugForEnLejlighed = samletForbrugForEnLejlighed+e2.getForbrug();
            }
        }
        return samletForbrugForEnLejlighed;
    }

   
    public void varmeregnskab() {
       
        for (int n=0; n<lejligheder.size(); n++){
            int lejID = lejligheder.get(n).getID();
            String lejSIDE = lejligheder.get(n).getSide();
           
            System.out.println("---");
            System.out.println("Lejlighed:\t" + lejID + lejSIDE);
            System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
            System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
            System.out.println("");
        }
       
        }


men når jeg kører det så opstår der en fejl og jeg får følgende fejl:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at Etageejendom.udregnSamletForbrugForEnLejlighed(Etageejendom.java:106)
    at Etageejendom.varmeregnskab(Etageejendom.java:128)
    at TopLevel.main(TopLevel.java:40)

altså så vidt jeg kan forstår fra filen, så betyder det at min arraylist ikke indeholder nogle ting.... Når jeg debugger så viser den også at "målinger" ikke inderholder nogle informationer... Men hvor laver jeg fejlen?


Ved godt det er svært at se fejlen herfra, uden at have filerne osv... men hvis det er så er jeg meget villig til evt at sende filerne... Bare jeg kan få hjælp..


På forhånd tusind tak for hjælpen :)
Avatar billede nielle Nybegynder
18. juni 2006 - 17:56 #1
Hvilken linje i din udregnSamletForbrugForEnLejlighed() er linje 106?
Avatar billede rdc Nybegynder
18. juni 2006 - 18:05 #2
ArrayList radiator = målinger.get(l).getMåler();
Avatar billede rdc Nybegynder
18. juni 2006 - 18:05 #3
her er indholdet af radiator classen, hvis det kan hjælpe:


import java.util.ArrayList;

public class Radiator {

    private ArrayList radiator = new ArrayList();
    private String ID;
    public double forbrug;
    private ArrayList måler = new ArrayList();

   
    public Radiator(double forbrug, String ID){
       
        this.forbrug = forbrug;
        this.ID = ID;
    }

       
    public double getForbrug () {
       
        return forbrug;
    }
   
    public String getID(){
       
        return ID;
    }
   
    public void tilføjMål(Måler aflæst) {
           
        måler.add(aflæst);
    }   
   
    public ArrayList getMåler() {
       
        return radiator;
    }
   
   
   
    public String udskrivRummål() {
         
        return ID  + " Måling: " + "(" + forbrug + ")";
       
    }
   
}
Avatar billede nielle Nybegynder
18. juni 2006 - 18:07 #4
Gættede på at det var den. :^)

Hvordan får din Etageejendom-klasse sat en værdi i målinger? Umiddelbart lyder det nemlig til at dette ArrayList ikke er så lang som antallet af lejligheder.
Avatar billede nielle Nybegynder
18. juni 2006 - 18:14 #5
Jeg tror ikke at der er fejl i Radiator-klassen.

Tror at:

målinger.get(l).getMåler();

- fejler i kaldet af get(l). Det vil den gøre hvis værdien af l ligger "ude forbi enden" af arrayet.
Avatar billede rdc Nybegynder
18. juni 2006 - 18:21 #6
jamen, hvorfor fejler den så ikke her:

    public double udregnSamletArealForEnLejlighed(int i){
       
        ArrayList rum = lejligheder.get(i).getRum();
        ArrayList<Rum> rumme19 = rum;
        double samletArealForEnLejlighed = 0;
        for (int p=0; p<rumme19.size();p++){
            Rum e1 = rumme19.get(p);
            if(e1.getID().startsWith("A")){
                samletArealForEnLejlighed = samletArealForEnLejlighed+e1.getAreal();
            }
        }
        return samletArealForEnLejlighed;
    }




import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class læsFil {

    static Etageejendom bygning = new Etageejendom();
   
    public static Etageejendom læsFil(String Filejendomsdata){
       
    try {
           
            BufferedReader læser = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
           
            String linie;
           
            while ( (linie = læser.readLine()) != null) {
               
                StringTokenizer dele = new StringTokenizer(linie, " ");
                String lejlighedstekst = dele.nextToken();
                int lejlighedsID = Integer.parseInt(lejlighedstekst.substring(0,1));
                Lejlighed lejligheder = new Lejlighed(lejlighedsID);
                String lejlighedsSide = lejlighedstekst.substring(1,2);                 
                lejligheder.setSide(lejlighedsSide);
               
                    while (dele.hasMoreTokens()) {
                   
                        String objekt = dele.nextToken();
                   
                        double Areal = Double.parseDouble(dele.nextToken());
                   
                        if (objekt.charAt(0)=='A') {
                           
                            // Hvis det er et rum (radiator)
                           
                            //int rumID = Integer.parseInt(objekt.substring(1,2));
                            String rumID = objekt;
                           
                            Rum rum = new Rum(Areal,rumID);
                           
                            lejligheder.tilføjRum(rum);
                        }
                        else if (objekt.charAt(0)=='G') {
                           
                            // Hvis det er en garage
                           
                            int garageID = Integer.parseInt(objekt.substring(1,2));
                           
                            Garage garage = new Garage(Areal,garageID,0);
                           
                            lejligheder.addGarage(garage);
                        }
                    }
                    bygning.Tilføj(lejligheder);
               
            }   
           
           
        }
        catch (NumberFormatException error) {
           
            error.printStackTrace();
           
        }
        catch (FileNotFoundException error) {
           
            System.out.println("Fejl filen blev ikke fundet");
           
        }
        catch (IOException error) {
           
            System.out.println("Fejl");
        }
        return bygning;
    }
       


   
   

}
Avatar billede rdc Nybegynder
18. juni 2006 - 18:25 #7
det her er hele min Etageejendom klassen:


import java.util.ArrayList;
import java.util.Iterator;


public class Etageejendom {

    private ArrayList<Lejlighed> lejligheder;
    private ArrayList<Måler> målinger;
    private double udgift = 0;
    //public double fordelingstal = 0;
    //public double lejlighedsandel = 0;
    Etageejendom bygning = this;
    Etageejendom mål = this;
    private double samletAreal = 0;
    private double samletForbrug = 0;

       
    public Etageejendom() {
       
        lejligheder = new ArrayList<Lejlighed>(0);
        målinger = new ArrayList<Måler>(0);
       
    }
       
    public void Tilføj(Lejlighed apartment) {
       
        lejligheder.add(apartment);
    }
   
    public void TilføjMål(Måler målment) {
       
        målinger.add(målment);
    }


   
    public ArrayList<Måler> getMålinger() {
       
        return målinger;
    }
   
    public Måler getMålinger(int index) {
       
        return målinger.get(index);
    }
   
    public ArrayList<Lejlighed> getLejligheder() {
       
        return lejligheder;
    }
   
    public Lejlighed getLejlighed(int index) {
       
        return lejligheder.get(index);
    }
   

    public void setUdgift(double udgift) {
       
        this.udgift = udgift;
    }
   
    public double getUdgift() {
       
        return udgift;
    }
   
    public void setSamletAreal(double samletAreal) {
       
        this.samletAreal = samletAreal;
    }
   
    public double getSamletAreal() {
       
        return samletAreal;
    }
   
    public void setSamletForbrug(double samletForbrug) {
       
        this.samletForbrug = samletForbrug;
    }
   
    public double getSamletForbrug() {
       
        return samletForbrug;
    }
   

   
    public double udregnSamletArealForEnLejlighed(int i){
       
        ArrayList rum = lejligheder.get(i).getRum();
        ArrayList<Rum> rumme19 = rum;
        double samletArealForEnLejlighed = 0;
        for (int p=0; p<rumme19.size();p++){
            Rum e1 = rumme19.get(p);
            if(e1.getID().startsWith("A")){
                samletArealForEnLejlighed = samletArealForEnLejlighed+e1.getAreal();
            }
        }
        return samletArealForEnLejlighed;
    }
   
    public double udregnSamletForbrugForEnLejlighed(int l){
       
        ArrayList radiator = målinger.get(l).getMåler();
        ArrayList<Radiator> rumme29 = radiator;
        double samletForbrugForEnLejlighed = 0;
        for (int p=0; p<rumme29.size();p++){
            Radiator e2 = rumme29.get(p);
            if(e2.getID().startsWith("A")){
                samletForbrugForEnLejlighed = samletForbrugForEnLejlighed+e2.getForbrug();
            }
        }
        return samletForbrugForEnLejlighed;
    }

   
    public void varmeregnskab() {
       
        for (int n=0; n<lejligheder.size(); n++){
            int lejID = lejligheder.get(n).getID();
            String lejSIDE = lejligheder.get(n).getSide();
           
            System.out.println("---");
            System.out.println("Lejlighed:\t" + lejID + lejSIDE);
            System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
            System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
            System.out.println("");
        }
       
        }
   
   

   


   
/*    public void udregnFordelingstal() {
       
        for(int i=0; i<getLejligheder().size(); i++) {
       
            ArrayList ru= lejligheder.get(i).getRum();
            ArrayList<Rum> r1 = ru;
   
            for(int j=0; j<r1.size();j++) {
               
            Rum r = r1.get(j);
           
            System.out.println(r.gætAreal());
           
            total = total+r.gætAreal();
       
            }
        //System.out.println(total);
        //System.out.println(lejligheder.size());
        }
    }*/
   

   
/*    public double udregnSamletForbrug(){
        for (int i=0; i<målinger.size(); i++){
            ArrayList rummål = målinger.get(i).getRum();
            ArrayList<Rum> q = rummål;
            for (int p=0; p<q.size();p++){
                Rum e = q.get(p);
                lejlighedsandel = lejlighedsandel+e.getMåler();
               
            }
            //fordelingstal += 0.027*mål.getLejligheder().get(). + 2.125*målinger.get(i).getMåler;
        }
        System.out.println("\n" + "Samlet varmeforbrug af lejlighederne i Etageejendomen er: " + "(" + lejlighedsandel + " kvm.)" + "\n");
        return udgift;
    }
       
        /*for (int i=0; i<måleaflæsninger.length; i++){
           
            fordelingstal += 0.027*lejligheder.get(i).getRum( + 2.125*målinger.get(i).getMåler;
               
            }
        System.out.println(fordelingstal);
        System.out.println(målinger.get(1).getMåler());
       
       
       
        return fordelingstal;
    }*/
   
   


       

/*
   
    public double udregnLejlighedsandel(double samletFordelingstal){
       
        lejlighedsandel = fordelingstal/samletFordelingstal;
       
        return lejlighedsandel;
    }   
*/




    public String toString() {
       
        String ejendomsdata = "";
               
        ejendomsdata = ejendomsdata +("Etageejendommen indeholder " + bygning.lejligheder.size() + " lejligheder;" + "\n");
       
        Iterator ejendomsrator = bygning.lejligheder.iterator();
               
        while (ejendomsrator.hasNext()) {
            Lejlighed lejligheder = (Lejlighed)ejendomsrator.next();
            ejendomsdata = ejendomsdata + (lejligheder.toString());
           
        }

        return ejendomsdata;
    }
   
    public String udskriveMåledata() {
       
        String måledata = "";
                       
        måledata = måledata +("Etageejendommen indeholder " + mål.målinger.size() + " lejligheder. Deres varmeforbrug er:" + "\n");
               
        Iterator målerator = mål.målinger.iterator();
       
        while (målerator.hasNext()) {
            Måler målinger = (Måler)målerator.next();
            måledata = måledata + (målinger.toString());
        }
       
        return måledata;
       
    }   
   

    public String udskrivUdgift() {
       
        return "Total udgiftet af ejendommen bliver: " + "(" + mål.udgift + ")" +  "\n";
       
    }
   
    public String udskrivSamletAreal() {
       
        return "Samlet areal af etageejendommen bliver: " + "(" + bygning.samletAreal + ")" + "\n";
       
    }
/*
    public String udskrivSamletArealForEnLejlighed() {
       
        return "Samlet areal af lejligheden bliver: " + "(" + bygning.samletArealForEnLejlighed + ")" + "\n";
       
    }*/
   
    public String udskrivSamletForbrug() {
       
        return "Samlet forbrug af etageejendommen er: " + "(" + mål.samletForbrug + ")";
       
    }

   


}
Avatar billede nielle Nybegynder
18. juni 2006 - 18:27 #8
Prøv at udskrive disse to værdier:

lejligheder.size();
målinger.size();

- inde fra Etageejendom-klassen. Hvad får du?
Avatar billede rdc Nybegynder
18. juni 2006 - 18:32 #9
så udskriver den:
lejligheder.size(); 0
målinger.size(); 7

men jeg udskrev den bare ved at ændre det her i Etageejendom-klassen:

    public String udskrivUdgift() {
       
        return "Total udgiftet af ejendommen bliver: " + "(" + mål.udgift + ")" +  "lej " + lejligheder.size() + "mål " +målinger.size();
       
    }
Avatar billede nielle Nybegynder
18. juni 2006 - 18:34 #10
Prøv at gøre det i varmeregnskab() i stedet fro:

    public void varmeregnskab() {
    System.out.println("Antal lejligheder: " + lejligheder.size());
    System.out.println("Antal målinger  : " + målinger.size(););
       
        for (int n=0; n<lejligheder.size(); n++){
            int lejID = lejligheder.get(n).getID();
            String lejSIDE = lejligheder.get(n).getSide();
           
            System.out.println("---");
            System.out.println("Lejlighed:\t" + lejID + lejSIDE);
            System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
            System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
            System.out.println("");
        }
       
        }
Avatar billede rdc Nybegynder
18. juni 2006 - 18:36 #11
så udskriver den det her efter fejlmeddelelserne:

Antal lejligheder: 7
Antal målinger  : 0
Avatar billede rdc Nybegynder
18. juni 2006 - 18:41 #12
jeg tror at jeg har fundet fejlen nielle :)... hvis du lægger mærke til det så har jeg været så dum at skrive:

    for (int n=0; n<lejligheder.size(); n++){
            int lejID = lejligheder.get(n).getID();
            String lejSIDE = lejligheder.get(n).getSide();

altså kører den kun ArrayListen lejligheder igennem... Men jeg har jo også ArrayListen målinger, hvor min andre dataer ligger i...

Nu er problemet så, hvordan laver jeg en metode der kører begge ArrayLister igennem, og til sidst udskriver mig, som sådan her:

System.out.println("---");
            System.out.println("Lejlighed:\t" + lejID + lejSIDE);
            System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
            System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
            System.out.println("");
Avatar billede nielle Nybegynder
18. juni 2006 - 18:50 #13
Jeg er ikke helt sikke på at jeg forstår hvad du vil...

Men hvis du har to ArrayLister, er det så ikke bare at lave en for-løkke for hver af dem?
Avatar billede rdc Nybegynder
18. juni 2006 - 18:56 #14
nej den siger stadig at målinger er tom... forstår det simpelthen ikke...
Avatar billede rdc Nybegynder
18. juni 2006 - 19:15 #15
kan du hjælpe nielle?
Avatar billede nielle Nybegynder
18. juni 2006 - 19:16 #16
Jeg er ikke lige med på hvad for noget kode du er igang med.
Avatar billede rdc Nybegynder
18. juni 2006 - 19:17 #17
hvorfor ikke?
Avatar billede nielle Nybegynder
18. juni 2006 - 19:20 #18
Når du skriver "... stadig ..." så går jeg ud fra at det betyder at du sidder og laver nogle eksperimenter med at få det til at virke. Du har ikke skrevet noget om hvad de eksperimenter går ud på ... eller hvordan den nye kode ser ud.
Avatar billede _carsten Nybegynder
18. juni 2006 - 19:47 #19
Metoden målinger.get(l).getMåler(); vil ALTID returnere en ArrayList med 0 elementer.

Prøv at se på din Radiator klasse, den har metoden

    public ArrayList getMåler() {
        return radiator;
    }


Men hvor er metoden   

    public ArrayList setMåler(Radiator r) {
        this.radiator = r;
    }
   

private ArrayList radiator = new ArrayList(); // FYLDES ALDRIG MED ELEMENTER
Avatar billede _carsten Nybegynder
18. juni 2006 - 19:48 #20
Sludder

Men hvor er metoden   

    public void setMåler(ArrayList r) {
        this.radiator = r;
    }
Avatar billede _carsten Nybegynder
18. juni 2006 - 20:58 #21
Jeg ved ikke om du er med hvad jeg mener, men du skal have
puttet nogle elementer i din radiator ArrayList.

Til orientering - din brug af variabel/klasse navne gør det ikke nemmere
at læse koden, du har en klasse Radiator som indeholder en instancevariabel
som også kaldes "radiator"

Du en metode som hedder tilføjMål(), der tager en Måler som parameter,
samtidig har du metoden getMåler(), men den returnerer en "radiator"

Det giver i mine øjne lidt navne forvirring, og gør det lidt vanskeligt at finde fejl.
Avatar billede rdc Nybegynder
18. juni 2006 - 21:09 #22
hej _carsten og nielle... jeg har fundet fejlen, jeg skulle bare kalde listerne på en anden måde... kalder dem sådan her:

      public void varmeregnskab(Etageejendom mål) {
           
               
                for (int n=0; n<mål.getMålinger().size(); n++){
                    int lejID = mål.getMåling(n).getID();
                    String lejSIDE = mål.getMåling(n).getSide();
                   
                    System.out.println("---");
                    System.out.println("Lejlighed:\t" + lejID + lejSIDE);
                    //System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
                    System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
                    System.out.println(målinger.size());
                }
     
               

nu kan den godt udskrive forbruget... Men nu er der et meget STØRRE problem... og har bare ingen ide om hva dælen jeg gør.... Problemet er at jeg ikke kan få udskrevet areal og forbruget samtidig, fordi jeg netop kører en for løkke, som jo kører indtil størrelsen af de to ArrayLister, "lejligheder" og "målinger". Jeg har lavet en funktion, som skal regne hvert lejligheds fordelingstal ud(tredje metode):

    public double udregnSamletArealForEnLejlighed(int i){
       
        ArrayList rum = bygning.getLejlighed(i).getRum();
        ArrayList<Rum> rumme19 = rum;
        double samletArealForEnLejlighed = 0;
        for (int p=0; p<rumme19.size();p++){
            Rum e1 = rumme19.get(p);
            if(e1.getID().startsWith("A")){
                samletArealForEnLejlighed = samletArealForEnLejlighed+e1.getAreal();
            }
        }
        return samletArealForEnLejlighed;
    }
   
    public double udregnSamletForbrugForEnLejlighed(int n){
       
       
        ArrayList radiator = mål.getMåling(n).getMåler();
        ArrayList<Radiator> rumme29 = radiator;
        double samletForbrugForEnLejlighed = 0;
        for (int p=0; p<rumme29.size();p++){
            Radiator e2 = rumme29.get(p);
            if(e2.getID().startsWith("A")){
                samletForbrugForEnLejlighed = samletForbrugForEnLejlighed+e2.getForbrug();
            }
        }
        return samletForbrugForEnLejlighed;
    }

    public double udregnFordelingstalForEnLejlighed(int i){
        fordelingstal = (0.027*udregnSamletArealForEnLejlighed(i)+2.125*udregnSamletForbrugForEnLejlighed(i));
        return fordelingstal;
    }

Jeg vil gerne have udskrevet mine lejligheder sådan her:

Lejlighed : ID
Lejlighedens samlet Areal: blabla
Lejlighedens samlet Forbrug: blabla
Fordelingstallet: blabla
Avatar billede nielle Nybegynder
18. juni 2006 - 21:27 #23
Hvordan kan problemet være "større" - nu kan programmet jo rent faktisk køre i modsætning til tidligere. ;^)

Mht. dit problem, har du da ikke lavet anden ændring i koden end at udkommentere linjen:

System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));

?
Avatar billede rdc Nybegynder
18. juni 2006 - 21:56 #24
ja, nielle du har ret... Men problemet er jo så netop at så snart jeg smækker den linie op , så melder den fejl...
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:01 #25
Har du så fejlsøgt i den metode ??

    public double udregnSamletArealForEnLejlighed(int i){
       
        ArrayList rum = lejligheder.get(i).getRum();

        System.out.println("" + rum.size() );  // EKSEMPELVIS HER


        ArrayList<Rum> rumme19 = rum;
        double samletArealForEnLejlighed = 0;
        for (int p=0; p<rumme19.size();p++){
            Rum e1 = rumme19.get(p);
            if(e1.getID().startsWith("A")){
                samletArealForEnLejlighed = samletArealForEnLejlighed+e1.getAreal();
            }
        }
        return samletArealForEnLejlighed;
    }
Avatar billede rdc Nybegynder
18. juni 2006 - 22:08 #26
forstår ikke hvad du mener carsten
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:11 #27
Hvis du får fejl når du fjerner udkommenteringen af linien:
    //System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));

så er det jo metoden udregnSamletArealForEnLejlighed(n) der er noget tosset med,
sandsynligvis er det her:    ArrayList rum = lejligheder.get(i).getRum();

rum er garanteret == 0
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:12 #28
Hvis du tester med: System.out.println("" + rum.size() );  // EKSEMPELVIS HER

får du enten 0, eller en nullPointerException
Avatar billede rdc Nybegynder
18. juni 2006 - 22:18 #29
ok, men carsten.. jeg vil da sige at problemet ligger her:

            for (int n=0; n<mål.getMålinger().size(); n++){
                    int lejID = mål.getMåling(n).getID();
                    String lejSIDE = mål.getMåling(n).getSide();
                   
                    System.out.println("---");
                    System.out.println("Lejlighed:\t" + lejID + lejSIDE);
                    //System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
                    System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
                    System.out.println(målinger.size());
                }
     
for hvis jeg laver den om så den ser sådan her ud:

    public void varmeregnskab() {
       
        for (int n=0; n<bygning.getLejligheder().size(); n++){
            int lejID = bygning.getLejlighed(n).getID();
            String lejSIDE = bygning.getLejlighed(n).getSide();
           
            System.out.println("---");
            System.out.println("Lejlighed:\t" + lejID + lejSIDE);
            System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
            //System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
            System.out.println("");
        }
       
    }


så virker det skam... men så er problemet at den ikke viser forbruget, fordi jeg udkommentere den, hvis jeg havde den med i koden, så melder den fejl... For jeg i forløkken kun kører den ene ArrayList igennem... forstår du hvad jeg mener?
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:19 #30
Kan du ikke paste fejlen her, så vi kan se den ??
Avatar billede rdc Nybegynder
18. juni 2006 - 22:20 #31
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at Etageejendom.getMåling(Etageejendom.java:44)
    at Etageejendom.udregnSamletForbrugForEnLejlighed(Etageejendom.java:109)
    at Etageejendom.varmeregnskab(Etageejendom.java:134)
    at TopLevel.main(TopLevel.java:30)
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:22 #32
Det er her du skal begynde at lede:
Etageejendom.getMåling(Etageejendom.java:44)
Avatar billede rdc Nybegynder
18. juni 2006 - 22:22 #33
public Måler getMåling(int index) {
       
    linie 44:    return målinger.get(index);
    }
Avatar billede rdc Nybegynder
18. juni 2006 - 22:23 #34
og Måler klassen ser sådan her ud:

import java.util.ArrayList;
import java.util.Iterator;

public class Måler {

   
    public int ID;
    private Garage garagemål;
   
    private ArrayList radiator = new ArrayList();
    private int lejlighedsID;
   
    private String side = "";

   

    public Måler (int lejlighedsID) {
       
        this.lejlighedsID = lejlighedsID;
    }
   
    public int getID(){
       
        return lejlighedsID;
    }
   
    public void tilføjRadiator(Radiator radia) {
       
        radiator.add(radia);
    }
   
    public ArrayList getMåler() {
       
        return radiator;
    }
   
    public void setSide(String side) {
       
        this.side=side;
    }

    public String getSide(){
       
        return side;
    }


    public void addGarage(Garage garagemål) {
       
        this.garagemål = garagemål;
    }   
   
    public boolean hasGarage() {
         
        return garagemål!=null;
    }

    public Garage getGarage() {
         
        return garagemål;
    }
   

    public String toString() {

        String målprint = ("Lejlighed " + getID() + getSide() + ". Rum: ");
        Iterator målerator = radiator.iterator();
       
        while (målerator.hasNext()) {
            Radiator rummål = (Radiator) målerator.next();
            målprint = målprint + (rummål.udskrivRummål() + ", ");
        }
        if (hasGarage()) {
            Garage garagemål = (Garage) getGarage();
            målprint = målprint +  ("Garage: " + garagemål.udskrivGaragemål());
        }
        målprint = målprint +  ("\n");
        return målprint;
    }
   

}
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:25 #35
Det er ikke i Måler klassen det er galt, den har ikke en metode som hedder getMåling()
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:27 #36
Det er i klassen Etageejendom du har et problem, og den har såvidt jeg kan se heller en metode som hedder getMåling()
Avatar billede rdc Nybegynder
18. juni 2006 - 22:43 #37
jamen det er jo det her:
    public Måler getMåling(int index) {
       
        return målinger.get(index);
    }
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:53 #38
Okay - så må du have tilføjet metoden efter du har post klassen Etageejendom herinde

Men den fortæller dig at ArrayList målinger ikke indeholder nogen elementer
Avatar billede _carsten Nybegynder
18. juni 2006 - 22:54 #39
post == postet

Lukker for i dag. :)
Avatar billede smirnoff Nybegynder
18. juni 2006 - 23:51 #40
Er du sikker på du har indlæst al data inden du kalder "varmeregnskab"
Du har for hver lejlighed een måler ikke sandt - jeg går udfra du har sikret at første index (0) i lejligheder svarer til index 0 i målinger

Hvorfor har du to self-referencer kaldet bygning og mål på din Etageejendom ?!

public void varmeregnskab() {

        for (int n=0; n<bygning.getLejligheder().size(); n++){

            int lejID = bygning.getLejlighed(n).getID();
            String lejSIDE = bygning.getLejlighed(n).getSide();
         
            System.out.println("---");
            System.out.println("Lejlighed:\t" + lejID + lejSIDE);
            System.out.println("Samlet Areal:\t"+udregnSamletArealForEnLejlighed(n));
            //System.out.println("Samlet Forbrug:\t"+udregnSamletForbrugForEnLejlighed(n));
            System.out.println("");
        }
     
    }
Avatar billede smirnoff Nybegynder
18. juni 2006 - 23:53 #41
doh .. kom til at sende for tidligt .. :P
- se bort fra metoden varmeregnskab i ovenstående
Avatar billede nielle Nybegynder
19. juni 2006 - 19:26 #42
Må jeg foreslå at du laver om på på din objektmodel:

    1) En etageegendom består af lejligheder.
    2) En lejlighed består af rum.
    3) Et rum har en eller flere målere.

Derfor bør Etageejendom-klassen have en ArrayList af Lejlighed-objekter, Lejlighed-klassen bør have en ArrayList af Rum-objekter, og Rum-klassen bør have en ArrayList af Måler-objekter. Etageegendom-klassen bør derimod ikke selv have en ArrayList af målere (med mindre at der er målere som ikke direkte hører til en af lejlighederne).

For at udregne forbruget kan du så lade Etagejendom'men kalde Lejlighed'erne som så kalder alle Rum'ene som så endeligt kalder Måler'ne:

public class Etageejendom {
    ArrayList<Lejlighed> lejlighederne = new ArrayList<Lejlighed>();
   
    public double samletForbrugForEtageejendom() {
        double forbrug = 0;
       
        for (Lejlighed lejlighed : lejlighederne) {
            forbrug += lejlighed.samletForbrugForLejlighed();
        }
       
        return forbrug;
    }       
}

public class Lejlighed {
    ArrayList<Rum> rummene = new ArrayList<Rum>();
   
    public double samletForbrugForLejlighed() {
        double forbrug = 0;
       
        for (Rum rum : rummene) {
            forbrug += rum.samletForbrugForRum();
        }
       
        return forbrug;
    }
}

public class Rum {
    ArrayList<Måler> målerene = new ArrayList<Måler>();
   
    public double samletForbrugForRum() {
        double forbrug = 0;
       
        for (Måler måler : målerene) {
            forbrug += måler.forbrug;
        }

        return forbrug;
    }
}

public class Måler {
    public double forbrug;
}
Avatar billede nielle Nybegynder
26. juni 2006 - 11:57 #43
Skal vi ikke vidrer med denne her?
Avatar billede rdc Nybegynder
18. august 2006 - 21:12 #44
jo, opret svar så tildeler jeg point :)
Avatar billede nielle Nybegynder
18. august 2006 - 21:23 #45
Betyder det at du har fået det til at virke?
Avatar billede rdc Nybegynder
24. august 2006 - 15:30 #46
jeps :)
Avatar billede nielle Nybegynder
24. august 2006 - 19:38 #47
Ok :^)

Du skriver ikke noget om hvem du vil have svar af, men nu smider jeg da et. :^)

... men mon ikke også _carsten skal lægge et?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester