18. juni 2006 - 17:39Der 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:
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){
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..
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.
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.
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.
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){
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();
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?
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)
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();
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; }
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?
Synes godt om
Ny brugerNybegynder
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.